2011-01-21 21 views
0

私は多スクリーンのiPhoneアプリを開発していますが、これは異なるスクリーン上にたくさんの入力を持ち、代わりにresignFirstResponderメッセージを送信するいくつかの方法で自分自身を繰り返す必要はなく、静的メソッド私のルートコントローラークラスで、すべての私のresignFirstReponderのニーズを単一の関数で解決してください。それは可能ですか?私は、インターフェイスのビルダーにルートコントローラの.hファイルをドラッグすることはできませんし、そこにクラスをドロップしようとすると、私はそれまでのイベントをフックすることはできません。静的なイベントをIBActionメソッドにフックする方法はありますか?イベント接続に静的IBActionメソッドを使用できますか?

編集:

私が達成しようとしているものの中に、より明確にされている必要があります。基本的には、テキストフィールドの "終了時に終了しました"イベントでresignFirstResponderを呼び出して、キーボードを取り除いています。 (これは正しい方法ですか?私はiPhoneの初心者です)私は別のビューでこれを全面的に使用する予定であるため、各ビューに対して同じ機能を記述する必要はありません。私は+(void) resignSomeKeyboardsOrSomethingの種類の機能を自分のルートコントローラーに持っていて、「終了時に終了しました」イベントを各ビューから引き継ぐことができます。それを行う方法はありますか?初めて曖昧さを残して申し訳ありません。

答えて

1

私がこれを理解しているかどうかを見てみましょう。あなたはあらゆる種類のことを行う複数の画面を持つアプリケーションを持っています。

通知はあなたのためにうまくいくように私に聞こえます。

これで、ルートビューコントローラで定義されている関数resignMyResponderがあるとします。ちょうどあなたの初期化関数では、あなたのルートビューコントローラファイルに次の行を追加します。

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(resignMyResponder:) 
name:@"resignThis" 
object:nil]; 

を次に、あなたの他の画面/ファイル、であなたは、単に行う、resignMyResponderが呼び出さたい時はいつでも:

[[NSNotificationCenter defaultCenter] 
postNotificationName:@"resignThis" object:nil]; 

resignMyResponderはおそらく呼び出される可能性のあるさまざまな状況をすべて処理するためにはかなり複雑である必要がありますが、それはアプリケーションの実装に依存します。

+0

これは完全に素晴らしいですが、私は間違いなく他のもののために使用しますが、私はこの場合もっと複雑にしようとしています。私は私の質問で明確ではなかったと思うと、より多くの情報を追加しました。しかし、この情報をありがとう、それは非常に貴重です! – Justin

0

UIResponder残念ながら、NSResponderはこれについては明らかではありません。

resignFirstResponder

それは に頼まれたことを 受信機に通知し、そのウィンドウ内の最初の 応答者としての地位を放棄します。

- (BOOL)resignFirstResponder

ディスカッション

ファーストレスポンダ 状況を辞任、YESを返し デフォルトの実装。サブクラスは メソッドをオーバーライドして状態を更新したり、 の選択を解除したり、NOを返したり、 が最初のレスポンダステータスを放棄することを拒否するなどのアクションを実行できます。

2つのカテゴリ(申し訳ありませんが、それは遅、多分これはoversimplifyingけど...される)への我々のグループクラスのインスタンスメソッドの場合:いくつかの他のオブジェクトから直接呼び出すことが意図されている

1)方法データを取得したり、アクションを実行することができます。 [view setNeedsDisplay:YES];

2)(具象的な)サブクラスによってオーバーライドされることを意図したメソッド。一般的に、これらのメソッドをコードで呼び出すことは決してありません。むしろ、カスタム実装を実行するためにオーバーライドする意図で、Cocoaによって呼び出されます。あなたのためにココアは- (void)drawRect:(NSRect)frame;を呼び出します。特に、抽象クラスの場合は、UIResponderNSResponderのようになります。

- (BOOL)resignFirstResponderは、後者のものです。このメソッドは本質的に「最初のレスポンダーを辞任しますか?」と尋ねるココアです。あなたはYESまたはNOと答えます。必要に応じて自動的に呼び出されます。直接呼び出す必要はありません。

NSResponderドキュメントはさらに明確である:

resignFirstResponder

それは に頼まれていますという 受信機に通知し、そのウィンドウ内の最初の 応答者としての地位を放棄します。

- (BOOL)resignFirstResponder

ディスカッション

ファーストレスポンダ 状況を辞任、YESを返し デフォルトの実装。サブクラスは メソッドをオーバーライドして状態を更新したり、 の選択を解除したり、NOを返したり、 が最初のレスポンダステータスを放棄することを拒否するなどのアクションを実行できます。

は オブジェクトにファーストレスポンダを作るために、NSWindowのmakeFirstResponder: 方法ではなく、このメソッドを使用します。決して このメソッドを直接呼び出すことはできません。

ないがmakeFirstResponder:にiPhoneと同等であるが、それはあなたが(あなたが積極的に新しいビューがファーストレスポンダ可能にするもの)のために努力すべきかである場合に確認してください。

関連する問題