FirstResponder メソッドはどこから来たのでしょうか?
-
22-09-2019 - |
質問
Apple が提供する IKImageDemo を見ていると、回転ラウンド スライダーが setRotation にリンクされています。FirstResponder のメソッド。ただし、プロジェクト内のオブジェクトにはそのようなメソッドがないようですが、コードは機能します。
これを自分のプロジェクトにコピーしようとしていますが、私の FirstResponder には setRotation がありません。メソッドなので、どこにあるのかわかりません。Googleは役に立たなかった...
ありがとう。
解決
さて、アプリで最初の応答者はIKImageViewのインスタンスであることを起こります。 setRotationにIKImageView応答:respondsToSelectorを通過させることによって見ることができるセレクタ(:@selector(setRotation :) IKImageViewの任意のインスタンスに)、文書ではsetRotation言及どこで見つけることができないが:方法
他のヒント
ファーストレスポンダーのメソッドは魔法ではありません。メッセージがファーストレスポンダーに送信されると、アプリの現在のファーストレスポンダー (これは通常、フォーカスされたビュー/コントロール) がメソッドを実装するかどうかを尋ねられます。存在する場合、メソッドが呼び出されます。そうでない場合は、チェーン上の次のレスポンダーが尋ねられ、以下同様に最上位レベル ( NSApplication
インスタンス)に達します。オブジェクトは呼び出されるメソッドを実際に実装する必要があり、単に宣言するだけでは済みません。
この場合 IKImageView
実装する -setRotation:
プライベートメソッドとして。これは、メソッドは存在しますが (IKImageView がファースト レスポンダーに送信されたメッセージを受け入れる理由はこのためです)、その使用法は文書化されておらず、サポートされていないことを意味します。Apple がプライベートな方法を使用してサンプルを出荷するのは奇妙に思えますが、それは問題ありません。メソッドの使用がサポートされているときに、パブリック ヘッダーからメソッドが誤って除外される場合があることは間違いありません。ただし、Apple の担当者からプライベート メソッドを使用してもよいと明確に指示されない限り、プライベート メソッドは避けるのが一般的に賢明です。
次を使用して、プライベート メソッドを含む Objective-C オブジェクトのすべてのメソッドのヘッダーをバイナリから生成できます。 クラスダンプ。
IKImageView
パブリックメソッドがある -setRotationAngle:
回転を変更したい場合は、おそらくこれが最善の方法です。
私はこの迷惑を解決する方法を見つけました。でも、元アップルの例では、あなた一度ファーストレスポンダでsetRotationのバインディングを削除し、あなたは、戻ってそれを置くことができない、このトリックをやっていない限り:単にファーストレスポンダのためのインスペクタを属性を使用してユーザー定義のアクションの追加「setRotationを:」と"ID" を入力します。今setRotationのバインディングファーストレスポンダでも、黄色の三角:アップルの例では消え、それは私自身のIKImageViewインスタンスにも現れます。
。