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プロキシが設定されていない、ジェスチャが競合している、テーブルビューまたはセルが他の透過ビューで覆われていることです。
調査の結果、上記の理由ではありません。 (本質はジェスチャの競合でもありますが、その時点でのみチェックされます。TableViewCell
、ViewController
、NavigationController
ジェスチャが追加されているかどうか、または「タップ」、「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