2

カスタム キーボードを機能させるには、どのテキスト フィールドが firstResponder であるかを追跡する必要があります。以下のコードでは、プログラムを大幅に単純化しすぎていますが、問題の要点は次のとおりです。

@implementation SimplePickerViewController
@synthesize pickerKeyboard;
@synthesize textView;
@synthesize textView2;
@synthesize firstResponder;

-(void)viewDidLoad{
    pickerKeyboard = [[PickerKeyboardViewController alloc] initWithNibName:@"PickerKeyboard" bundle:nil];
    pickerKeyboard.delegate = self;
    [self.textView setInputView:pickerKeyboard.view];
    [self.textView setDelegate:self];
    [self.textView2 setInputView:pickerKeyboard.view];
    [self.textView2 setDelegate:self];
}

-(void)hideKeyboard{
    [self.firstResponder resignFirstResponder];
    self.firstResponder = nil; //without this line, the code doesn't work.
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    self.firstResponder = textView;
    [self.pickerKeyboard.picker reloadAllComponents];
    return YES;
}

firstResponder を nil に設定する行を削除すると、コードは正しく機能しなくなりますが、その理由はわかりません。(その行がなければ、最初の textView を選択してキーボードを表示できますが、その後はキーボードを元に戻すことはできません。何かアイデアはありますか? ありがとう!

4

2 に答える 2

3

カスタムキーボードが機能するために firstResponder を追跡する必要がある理由を理解しているかどうかはわかりません。ファーストレスポンダーが何であるかを知らずにカスタムキーボードを使用しています。

使いますか:

textView.inputView = pickerKeyboard

最初のレスポンダーを辞任するようにビューに求められた、次のことはどうですか。

[self.view endEditing:NO];
于 2011-04-14T21:56:18.083 に答える
2

私は同様の問題を抱えており、問題を理解しました。Apple のファーストレスポンダ コードのどこかで、彼らは という名前のセレクタを使用していfirstResponderます。プロパティを作成したときに、firstResponderそのセレクターを誤ってオーバーライドしました。これにより、Apple のコードが失敗します。私の謙虚な意見では、これは Apple のフレームワークのバグであり、そのfirstResponder方法はどこにも文書化されていません。あなたのプロパティmyFirstResponderやその他の名前を付ければ、すべてがうまくいくはずです。

ビューがナビゲーション スタックからポップされたときにキーボードが表示されないのはなぜですか?を参照してください。

于 2011-11-15T20:40:48.647 に答える