web-dev-qa-db-ja.com

iOSのファーストレスポンダーの正式な定義は何ですか?

ファーストレスポンダーオブジェクトは、入力アクティビティなどに応じてコールバックシグナルを受信し、それを処理するレスポンダーが見つかるまでチェーンをバブルアップすることを理解しています。

しかし、より正式には、ファーストレスポンダーの範囲は何ですか?たとえば、それはアプリケーション全体のレスポンダーですか?ファーストレスポンダーであるということは、この特定のオブジェクトがインタラクションの通知を受け取ると言っているようです。別のレスポンダーがファーストレスポンダーのステータスを盗むことはできますか?

いくつかの関連情報を説明または指示してください。レスポンダーとは何かについてのAppleの一般的な説明を読みました。もう少し作り上げられた説明を探しています。

19
Joey Carson

IOSのファーストレスポンダーのスコープは、ビュー階層によって決定されます。レスポンダーはレスポンダーの階層の一部であり、Appleのドキュメントで定義されていることを忘れないでください。

レスポンダーは、イベントに応答して処理できるオブジェクトです。すべてのレスポンダーオブジェクトは、最終的にUIResponder(iOS)またはNSResponder(OS X)から継承するクラスのインスタンスです。

実際には、すべてのレスポンダーは、アプリケーション自体に至るまでの潜在的なレスポンダーのチェーンの一部です。つまり、レスポンダーのスコープは、応答を処理できるオブジェクトを取得するためにチェーンのどこまで行かなければならないかによって決まります。ファーストレスポンダーがUITextFieldなどのUI要素である場合、スコープはそのレスポンダーのスコープに関連付けられます。

この画像では、iOSのファーストレスポンダー階層が左側に示されています(右側のOS X)。

First Responder Hierarchy

質問の2番目の部分に答えるために、はい、ユーザーが要素を操作した場合、オブジェクトはファーストレスポンダーのステータスを「盗む」ことができます。

  1. ユーザーがtextField1をクリックします。これが最初の応答者になりました。
  2. ユーザーが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のドキュメントを読んでいない他の人にとって、良い出発点はここにあるレスポンダー階層の説明です: https://developer.Apple.com/library/ios/documentation/General/ Conceptual/Devpedia-CocoaApp/Responder.html

これがお役に立てば幸いです。

18
Ryan Kreager

これはウィンドウのプロパティです。ウィンドウには、常に1人のファーストレスポンダーしかいません。すべてのUIResponderは、becomeFirstResponderを送信することでファーストレスポンダーのステータスを要求できます。そのため、UITextFieldにメッセージを送信することで、UITextFieldに「フォーカス」を与えることができます。

11
matt