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 回答