13

inputView私は自分の習慣を設定しましたUITextField。カスタムinputViewで選択したデータをに表示する方法が必要UITextfieldです。これは、システムキーボードと同じ方法で実現したいと思います。

誰かがこれがどのように行われるか知っていますか?システムキーボードはどのようにしてUITextfieldファーストレスポンダーへの参照を取得しますか?

4

2 に答える 2

14

カスタム入力ビューからテキストフィールドに入力を送り返すときは、に準拠したUIKeyInputプロトコルメソッドを使用できる(すべきである)ことに注意してください。UITextFieldすなわち:

- (void)deleteBackward;
- (void)insertText:(NSString *)text;
于 2012-10-14T19:38:47.403 に答える
12

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

システムにファーストレスポンダーを要求するだけです。残念ながら、それはプライベートUIKitメソッドです(または、最後にチェックしました)。ビュー階層を繰り返して各ビューに質問することでファーストレスポンダーを見つけることができますが、それはかなり不器用です。

代わりに、入力ビューのテキストフィールドへのリンクを追加できます(入力ビューはカスタムUIViewサブクラスであると想定しています)。

@property(nonatomic, assign) UITextField* target;

次に、View ControllerのUITextFieldデリゲートメソッドを使用して、テキストフィールドがいつフォーカスされているかを確認します。

- (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;
}
于 2012-04-11T05:40:01.000 に答える