8

私はいくつかのファーストレスポンダーポイントについて混乱しています:

  1. を呼び出すと、最初- becomeFirstResponderにシステムが呼び出されますか? – canBecomeFirstResponderなんで?
  2. - becomeFirstResponderとの両方があるのはなぜ– canBecomeFirstResponderですか? どのような状況で異なる値を返すことができますか?
  3. アプリケーションには毎回ファーストレスポンダーが必要ですか? – resignFirstResponderもしそうなら、私が何かのオブジェクトを呼び出すと何が起こっていますか? すぐに最初のレスポンダーになるかUIApplication、それともこの「トークン」がレスポンダー チェーンのどこかでスローされるか? その巡礼者トークンを取り除きたいときにオブジェクト- becomeFirstResponderを呼び出すことはできますか?UIApplication
  4. ...

システムがファーストレスポンダーをどのように管理するか、誰か説明してください。あるオブジェクトがファーストレスポンダーになったときに内部で何が起こっているのか、ファーストレスポンダーを辞任したときに何が起こっているのか。システムは何を呼び出しますか... ありがとうございます!

4

1 に答える 1

6
  1. becomeFirstResponderdo callのデフォルトの実装ですcanBecomeFirstResponder。これは、NO を返すレスポンダーがcanBecomeFirstResponderファーストレスポンダーになることを想定していないためです。
  2. becomeFirstResponder成功すると、受信者が実際にファーストレスポンダになります。canBecomeFirstResponder実際には何も変更せずに、受信者が最初の応答者になる意思があるかどうかを確認するだけです。becomeFirstResponder現在のファーストレスポンダーが辞任を拒否した場合、失敗する可能性があります。becomeFirstResponder同様に失敗する可能性がある他の状況があるかもしれません。
  3. ファーストレスポンダー ステータスを持つコードが含まれている必要はありません。プライベート UIResponder メソッドから判断するとfirstResponder、この場合、システムは特定のデフォルトを割り当てません。

基本的に、何かが最初の応答者になりたい場合、現在の最初の応答者 (存在する場合) は辞任するように求められ、その後、新しいオブジェクトが最初の応答者になります。これにより、システムがオンスクリーン キーボードを表示したり、その他のアクションを実行したりする場合があります。ファーストレスポンダが辞任すると、同様に、システムがスクリーン キーボードを非表示にするか、その他のアクションを実行する可能性があります。

非タッチ イベントが発生すると、最初に UIWindow に配信されます。UIWindow はそれをファーストレスポンダに配信します。ドキュメントでは、UIWindow がイベント自体を処理しようとするか (イベント自体を処理しない場合は通常どおり UIApplication に渡すか)、または最初のレスポンダーがない場合は単にイベントを無視するかどうかを指定していないようです。

詳細については、ドキュメントを参照してください。

于 2011-09-07T15:41:17.263 に答える