跟踪firstResponder对象

时间:2010-10-02 16:36:52

标签: ios first-responder

我需要跟踪哪个文本字段是我的自定义键盘工作的第一个响应者。在下面的代码中,我严重过度简化了我的程序,但这是问题的要点:

@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来调出键盘,但之后我再也不会把键盘带回来。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

我不确定我是否理解为什么firstResponder需要跟踪自定义键盘才能工作。我使用自定义键盘而不知道第一响应者是什么。

你使用:

textView.inputView = pickerKeyboard

以下内容如何调用第一个响应者的视图:

[self.view endEditing:NO];

答案 1 :(得分:2)

我遇到了类似的问题,我刚刚发现了这个问题。在Apple的第一个响应者代码的某个部分的某个地方,他们正在使用名为firstResponder的选择器。当您创建属性firstResponder时,您无意中覆盖了该选择器。这将导致Apple的代码失败。在我看来,这是Apple框架中的一个错误,firstResponder方法在任何地方都没有记录。将您的财产命名为myFirstResponder或其他任何内容,一切都应该正常。

请参阅Why does the keyboard not show when a view is popped from the navigation stack?