質問

私は、iPhoneのレスポンダチェーンについて混乱しています。具体的には、iPhoneのイベント処理ガイドののhttp:/ /developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html に、我々は以下のものを持っています:

最初の応答者は、タッチイベント以外のイベントの最初の受信者に指定されているアプリケーション(通常のUIViewオブジェクト)内のレスポンダオブジェクトです。

しかし、UIViewのは、UIResponderのサブクラスです。そして、UIResponderクラスの参照は、この氏は述べています:

- (BOOL)canBecomeFirstResponder

戻り値

受信機はNOそうでなければ、第一応答者になることができない場合はYES。 ディスカッション

デフォルトではNOを返します。 YESこの方法から、レスポンダオブジェクトを返す場合、それはファーストレスポンダになり、タッチイベントやアクションメッセージを受け取ることができます。サブクラスでは、ファーストレスポンダになることができるように、このメソッドをオーバーライドする必要があります。

は、私は明らかな矛盾で混乱しています。誰も私のためにそれをクリアすることはできますか?

何それの価値については、

は、私は単純なビューベースのアプリケーションを設定し、そのビューにcanBecomeFirstResponderとisFirstResponderを呼びました。どちらも、NOを返します。

役に立ちましたか?

解決

これが意味することは、基本的なUIViewのは、ファーストレスポンダになることができないということである - 。それはモーションイベント、編集メニューメッセージなどで何もしません。

(UITextViewのような)いくつかのUIViewサブクラスがファーストレスポンダになることができます、そしてあなたがそうあまりにも行い、独自のUIViewのサブクラスを書くことができます。

他のヒント

命名法は混乱することができます。代わりに「最初の応答者」の「初期イベントターゲット」ファーストレスポンダは、すべてのイベントの最初のターゲットとなっている、すなわち対象と考えます。アップルのAPIで、通常のウィンドウを記述するために予約されているが、いくつかのAPIで、これはまた、「フォーカス」と呼ばれています。

は、任意の所与の時点で、アプリで唯一の第一応答者/ intialイベント - ターゲットがあります。唯一の個々のオブジェクト/インスタンスは、最初の応答者/ intial-イベントのターゲットになることができます。そのインスタンスは最初の応答者/ intial-イベント - ターゲットになる能力を持っている場合、クラスは単に定義することができます。クラスの必要性は、それがそうする意味を成している場合、アプリの最初の応答者/ intial-イベントのターゲットになるための能力を提供します。たとえば、テキストフィールドは、明らかにそれは編集自体にそれらのイベントを使用できるようにトラップイベントに能力を必要とします。これとは対照的に、静的なラベルには、このような機能を必要としません。

はNSResonderからかどうか、特定のクラスの継承クラス(またはクラスの特定のインスタンス)は、それ自体が第一応答者/ intialイベント - ターゲットとして設定するようになるかどうかには関係ありません。その能力は、単にcanBecomeFirstResponderメッセージへのインスタンスの応答から来ています。同じインスタンスは、条件の一組の下で第一応答者/ intialイベント - ターゲットであることを拒否したときに条件が変化し、後でそれを可能にすることができます。彼らが望むならクラスはもちろん、状況をハードコーディングすることができます。

言い換えれば、第一応答者/ intialイベント - ターゲットは、特定の時間に特定のインスタンスの状態です。第一応答者/ intialイベント - ターゲットは、ホットポテトまたはUI内のインスタンスからインスタンスに渡されるトークンのようなものです。一部のクラスは、すべてのホットポテトをつかむことを拒否する。いくつかは、いつもと他の人が他の人を、時にはそれをつかむと、それを無視します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top