故障排除成为第一个响应者,没有为某些用户显示键盘

时间:2011-12-12 14:42:05

标签: ios becomefirstresponder

我有一个TextView应该按下按钮显示,让用户通过键盘输入文字。

- (IBAction) changeName {

    changeNameBtn.hidden = YES;
    backBtn.hidden = YES;

    usernameLabel.hidden = NO;
    inputTextField.hidden = NO;
    [inputTextField becomeFirstResponder]; // to show keyboard
}

这适用于我们大多数人。

但键盘不会显示我的某些测试人员,位于地理位置偏远的位置。怎么麻烦拍这个?这可能是我们设备行为不同的原因?它对我和其他人都很好。我们都使用相同的设备(iPod,iOS 4.1 - 5.1)。

我尝试的第一件事无效:

我猜测inputTextField以某种方式在becomeFirstResponder被触发之前没有及时显现,所以我添加setNeedsDisplay,因为我认为会强制更新。

[inputTextField setNeedsDisplay];
[inputTextField becomeFirstResponder];

第二次我试过的东西不起作用:

if([inputTextField canBecomeFirstResponder]){
    [inputTextField becomeFirstResponder];
}

第三次我试过的是一种解决方法,要求不幸的用户按下该字段:

- (IBAction) inputTextFieldTouch {
    [inputTextField becomeFirstResponder];
}

此解决方法有效,但必须有更好的方法。请告诉我我做错了什么! :)以及如何处理这样的问题而不能自己复制?

4 个答案:

答案 0 :(得分:26)

我稍后通过这一行致电becomeFirstResponder

[self.searchBar performSelector:@selector(becomeFirstResponder) 
                     withObject:nil 
                     afterDelay:0.1f];

它对我有用。希望这有帮助。

答案 1 :(得分:9)

当您尝试将其作为第一响应者时,textview尚未完成绘制。

您可以尝试设置动画的外观并在完成块中设置第一个响应者。

[UIView animateWithDuration:0.0 animations:^{
   [view addSubview:textView];
} completion:^(BOOL finished){
   [textView becomeFirstResponder];
}];

答案 2 :(得分:4)

从iOS8开始,在UITextView上调用becomeFirstResponder并不会在iOS模拟器上为我显示键盘,但它会在真实设备上显示。因此,请务必使用实际设备进行检查。但这不会发生在iOS7上。

答案 3 :(得分:0)

尝试看看你是否可以先显示键盘:

if([inputTextField canBecomeFirstResponder]){
    [inputTextField becomeFirstResponder];
}