tableViewを一度に確認することを忘れないでください:didSelectRowAtIndexPath:エクスペリエンスは呼び出されません



Remember Check Tableview Once



友人がtableViewを確認するのを手伝ってください:didSelectRowAtIndexPath:呼び出さない理由。最初に結果を言います:
次のメソッドがUIViewのカテゴリUIView + Extension.mに追加されました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self endEditing:YES] }

UITableViewクリックジェスチャを傍受しました。削除する必要があります
もともと、私は任意のビューをクリックしてキーボードを片付けたかったのです。その結果、UITableViewのクリックが失敗しました。このメソッドをBaseViewController inに書く必要があります



トラブルシューティングの経験について話させてください。
元のプロジェクト構造は、従来のアプリ構造であり、custom UITabBarController 5つのカスタムを備えたルートビューコントローラーとしてUINavgationController

1. tableView: didSelectRowAtIndexPath:実行されません。通常の理由は、tableViewプロキシが設定されていない、ジェスチャが競合している、テーブルビューまたはセルが他の透過ビューで覆われていることです。

調査の結果、上記の理由ではありません。 (本質はジェスチャの競合でもありますが、その時点でのみチェックされます。TableViewCellViewControllerNavigationControllerジェスチャが追加されているかどうか、または「タップ」、「ges」のグローバル検索もあります'およびその他のキーワード)



2. SwizzleMethodを使用するサードパーティライブラリがあるかどうかも考えてください、置き換えられましたtableView: didSelectRowAtIndexPath:

'SwizzleMethod'、 'Swizzle'およびその他のキーワードのグローバル検索が見つかりません

3.ルートビューコントローラーをUIViewControllerに置き換えます

上に1つ追加UITableView、最も簡単な方法で、見つかったかクリックできない

4.プロジェクト内の無関係なファイルとコードをすべて削除し、ルートビューコントローラーのみを残しますUIViewController

クリックできることがわかりました、説明はコードの問題です



5.プロジェクトファイルを復元します。AppDelegate.h with AppDelegate.m無関係なコードが削除されます。ストーリーボードをルートビューコントローラーとして使用します

失敗

6.すべてのカスタムコントローラーを削除します

失敗

7.サードパーティライブラリを削除します

失敗

8.カスタム分類方法を削除します

成功、カスタム分類方法で問題を特定する

9.カスタムファイルを復元し、1つずつ確認します

分類メソッドを1つずつコメントアウトします.mファイル内のすべてのメソッド実装、検証の実行
(ファイルを削除しないのはなぜかコメント.mファイル:分類方法が相互に呼び出されるため、削除後にエラーが報告されます。分類方法は呼び出されないと判断したので問題ありません。コメントアウト付き)
コメントアウトされるまでUIView+Extension.mメソッドinの後に正常に呼び出されましたtableView: didSelectRowAtIndexPath:
トラブルシューティングUIView+Extension.m
記事の冒頭で述べた方法を見つけました

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self endEditing:YES] }

他のメソッドを復元し、上記のメソッドに注釈を付けて、成功する

10.元のプロジェクトを開き、上記の方法をコメントアウトします

成功

UIView+Extension分類は主に、幅や高さの属性などのビュー属性を取得し、UIView関数を拡張して、アクティブに呼び出すための便利な方法です。touchesBegan: withEvent:はいUIView with UIViewController親クラスUIResponderジェスチャーイベントを書き換えるメソッドは、UIViewなどが呼び出されるたびに呼び出されるため、ジェスチャーの競合が発生します。

転載:https://www.jianshu.com/p/84e1994520b3