inputView
私は自分の習慣を設定しましたUITextField
。カスタムinputView
で選択したデータをに表示する方法が必要UITextfield
です。これは、システムキーボードと同じ方法で実現したいと思います。
誰かがこれがどのように行われるか知っていますか?システムキーボードはどのようにしてUITextfield
ファーストレスポンダーへの参照を取得しますか?
inputView
私は自分の習慣を設定しましたUITextField
。カスタムinputView
で選択したデータをに表示する方法が必要UITextfield
です。これは、システムキーボードと同じ方法で実現したいと思います。
誰かがこれがどのように行われるか知っていますか?システムキーボードはどのようにしてUITextfield
ファーストレスポンダーへの参照を取得しますか?
カスタム入力ビューからテキストフィールドに入力を送り返すときは、に準拠したUIKeyInput
プロトコルメソッドを使用できる(すべきである)ことに注意してください。UITextField
すなわち:
- (void)deleteBackward;
- (void)insertText:(NSString *)text;
システムキーボードは、最初のレスポンダーである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;
}