「ファーストレスポンダは、」 - 私はそれが権利を取得しましたか?
-
11-09-2019 - |
質問
私はすぐにこれを要約してみましょう:nibファイルの「ファーストレスポンダは、」ユーザーのフォーカスを持っているUIコントロール要素を表すオブジェクトです。だから、ユーザーがコントロールをクリックした場合、ファーストレスポンダとしてUIコントロールをクリックしたペン先セット。私は、例えば、メッセージ、ユーザーがクリックすることによって活性化しているものは何でも「赤いフォントの色を作る」を送ることができるように私のアプリでは、私は、ペン先からその「ファーストレスポンダ」への出口を作ることができます。
そして、このファーストレスポンダUIコントロールがそのメッセージを理解していない場合、メッセージは親要素または祖父母まで、レスポンダチェーンに渡されます(など)UI制御要素は、メッセージを理解しています。それ以外の場合は無視されます。
だから、ファーストレスポンダは、常にフォーカスを持つUIコントロールへの「リンク」を確立します。その権利はありますか?
解決
右全体像、最初の段落の間違った実装の詳細ます。
NibFileにおけるA "ファーストレスポンダは、" オブジェクトです...
いや、実際には、ファーストレスポンダはnil
です。ペン先にファーストレスポンダにUIコントロール(例えば、ボタン)を接続するコードで[control setTarget:nil]
と同等である。
のnibウィンドウの最初のレスポンダフェイク・オブジェクトの理由はIBに、あなたは(、ターゲットポップアップメニューからアクションを選択するには、Ctrlキーを押しながらドラッグ)を同時にターゲットとアクションを設定し、ということです。あなたがそうnil
するためにそれを設定するには、アクションを設定し、コードでできるように、未設定のターゲットを離れることができない、あなたはとても明示的に行う必要があります。それがためにファーストレスポンダがあるものです:それはnil
を表す偽のオブジェクトなので、あなたがターゲットとアクションの特定の実際のターゲットに設定する際にあなたが行うのと同じ方法を設定することができます。
はもちろん、あなたは、nil
のみビューターゲットに何かを設定するために、これを使用することはできません。あなただけのファーストレスポンダ、他にはないものを意味するために使用することができます。
だから、UIコントロールのユーザーklicksは、ペン先が設定した場合...
ペン先には何もしません。これは、ディスク上に格納されたオブジェクトの単なる凍結乾燥したコレクションです。あなたがNSNibをインスタンス化する場合であっても、あなたがやっているすべては、いくつかのオブジェクトを解凍されます。これは、物事を行うオブジェクトです。
あなたはペン先からのファーストレスポンダにあなたが接続された制御をアーカイブ解凍時に手近な場合には、そのターゲットは(:nil
のターゲットそれはファーストレスポンダが実際にあるものだ、覚えておいてください)nil
に設定されています。コントロールのターゲットはnil
であり、ユーザがそれをクリックすると、それは時にファーストレスポンダ方レスポンダにそのアクションを送ります。
あなたの第二と第三の段落は正しいです。
他のヒント
レスポンダは、(例えば、ボタンのクリックなど)イベントが発生したときのアクション(通話機能)を実行する任意のオブジェクトです。ウィンドウ内のパネル内部例えばボタン - レスポンダチェーンは、それぞれが互いに中に含まれるオブジェクトのシーケンスです。イベントが発生すると、我々はnil
レスポンダが設定されていないとされ、したがってイベントに応答できるオブジェクトを見つけるまで、私たちは、チェーンを反復します。だからではなく、ウィンドウ内の各ボタンのResponderオブジェクトを提供するので、私たちは、ウィンドウ全体のための単一の応答を提供することができます。最初の応答者は単にレスポンダチェーン内の最初の目的である - 第一応答者にイベントをリンクするイベントがチェーンを通過することを可能にする
それは説明する良い仕事をして、このリンクをチェックしてください。私はあなたがそれの要点を持っていると思います。
http://cocoadev.com/FirstResponderする
ソースから:
FirstResponderは、第一の目的であります 与えられているレスポンダチェーンで イベントに応答する機会ます。