2011-09-07 11 views
8

私はseveralsファーストレスポンダポイントについて困惑している:私は- becomeFirstResponderを呼び出す場合理解システムロジック

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

誰かは、システムがその最初の応答者をどのように管理するか、私に説明してください。どんなオブジェクトがファーストレスポンダになったときに、何がファーストレスポンダを辞めるときに何が起こっているのか。システムコールは何を呼びますか...ありがとう!

答えて

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

基本的に、何かが最初の応答者になりたいとき、現在の最初の応答者(もしあれば)が辞任するように求められた後、新しいオブジェクトが最初の応答者になります。これにより、システムはオンスクリーンキーボードを表示したり、何らかのアクションを起こすことがあります。最初のレスポンダーが辞任すると、同様にシステムがオンスクリーンキーボードを隠すか、何らかの他の処置をとることがあります。

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

詳細はthe documentationを参照してください。