2012-04-10 4 views
11

私はにカスタムinputViewを設定しました。カスタムinputViewで選択したデータをUITextfieldに表示する方法が必要です。私はこれをシステムキーボードがやっているのと同じようにしたいと思っています。UITextFieldのカスタムinputView、入力をテキストフィールドに戻す方法を教えてください。

これはどのように行われているのですか?システムキーボードは、最初のレスポンダーであるUITextfieldへの参照をどのように取得しますか?

+0

正確に言うと、「テキストフィールドに直接入力する」とはどういう意味ですか?あなたは、UITextFieldにフォーカスしたいですか? – Dion

+0

申し訳ありませんが、私は私の説明でもっと正確だと思った。つまり、UITextFieldのinputViewプロパティをカスタム入力ビューに設定しています。だからユーザーが私のカスタムinputView上のボタンを押すと、どのように私はあなたの入力を反映するためにそのUITextfieldのテキストプロパティを変更することができるように、現在の最初のレスポンダーであるUITextfieldへの参照を取得するのですか? –

答えて

12

システムキーボードは、最初のレスポンダであるUITextfieldへの参照をどのように取得しますか?

ただシステムに最初のレスポンダーを尋ねるだけです。残念なことに、それは私的なUIKitメソッドです(または最後にチェックしました)。最初のレスポンダーは、ビュー階層を再帰して各ビューを尋ねることで見つけることができますが、それはかなり不器用です。次に、あなたのビューでのUITextFieldのデリゲートメソッドを使用し

@property(nonatomic, assign) UITextField* target; 

代わりに、あなたは(私はあなたの入力ビューは、カスタムUIViewのサブクラスであると仮定しています)入力画面上のテキストフィールドへのリンクを追加することができますテキストフィールドがフォーカスされているときに参照するには、コントローラ:

- (void)textFieldDidBeginEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = textField; 
} 

- (void)textFieldDidEndEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = nil; 
} 
+0

偉大な答えデーヴ、それはまさに私が探していたものです、ありがとう。 –

10

戻ってテキストフィールドにカスタム入力ビューからの入力を送信する場合は、あなたがUITextFieldが準拠UIKeyInputプロトコルメソッドを使用します(必要がある)ことに注意してください。つまり、

- (void)deleteBackward; 
- (void)insertText:(NSString *)text; 
関連する問題