ファースト レスポンダ オブジェクトは、入力アクティビティなどに応じてコールバック信号を受信し、それを処理するレスポンダが見つかるまでチェーンを上って行くものであると理解しています。
しかし、もっと正式には、ファースト レスポンダーの範囲は何でしょうか? たとえば、アプリケーション全体のレスポンダーでしょうか? ファースト レスポンダーとは、単にこの特定のオブジェクトがインタラクションの通知を受け取るということのようです。別のレスポンダーがファースト レスポンダーのステータスを奪うことはできますか?
適切な情報を説明するか、その情報を教えて下さい。レスポンダーとは何かについての Apple の一般的な説明を読みました。もう少し詳しく説明した説明を探しています。
ベストアンサー1
iOS のファースト レスポンダーの範囲は、ビュー階層によって決まります。レスポンダーはレスポンダーの階層の一部であり、Apple のドキュメントで定義されていることに注意してください。
レスポンダーは、イベントに応答して処理できるオブジェクトです。すべてのレスポンダー オブジェクトは、最終的に UIResponder (iOS) または NSResponder (OS X) から継承されるクラスのインスタンスです。
実際には、すべてのレスポンダーは、アプリケーション自体にまで至る潜在的なレスポンダーのチェーンの一部です。つまり、レスポンダーのスコープは、応答を処理できるオブジェクトを取得するためにチェーンをどれだけ上までたどるかによって決まります。最初のレスポンダーが UITextField などの UI 要素である場合、スコープはそのレスポンダーのスコープに結び付けられます。
この画像では、iOS ファーストレスポンダー階層が左側に表示されています (右側は OS X)。
質問の 2 番目の部分に答えると、はい、ユーザーが要素と対話すると、オブジェクトはファーストレスポンダーのステータスを「盗む」ことができます。たとえば、次のようになります。
- ユーザーが textField1 をクリックします。これが最初のレスポンダーになります。
- ユーザーが textField2 をクリックします。textField2 は textField1 からファーストレスポンダーのステータスを引き継ぎました。
...そして、特定の機能を使用して、彼らにファーストレスポンダーのステータスを付与することができます:
[textField3 becomeFirstResponder]; //This is now the first responder
[textField4 becomeFirstResponder]; //Now textField4 has 'stolen' first responder status
[textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up
これを読んでいて、Apple のドキュメントをまだ読んでいない人にとって、良い出発点は、ここにある Responder 階層の説明です。https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/Responder.html
これが役に立つことを願っています!