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

JOG*_*JOG 14 becomefirstresponder ios

我有一个TextView应该按下按钮时显示,并让用户通过键盘输入文本.

- (IBAction) changeName {

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

    usernameLabel.hidden = NO;
    inputTextField.hidden = NO;
    [inputTextField becomeFirstResponder]; // to show keyboard
}
Run Code Online (Sandbox Code Playgroud)

这适用于我们大多数人.

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

我试过的第一件事不起作用:

我猜测inputTextField在某种程度上没有及时显现,在becomeFirstResponder被解雇之前,所以我添加了setNeedsDisplay因为我认为会强制更新.

[inputTextField setNeedsDisplay];
[inputTextField becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)

我试过的第二件事不起作用:

if([inputTextField canBecomeFirstResponder]){
    [inputTextField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

我尝试的第三件事是解决方法,要求不幸的用户按下该字段:

- (IBAction) inputTextFieldTouch {
    [inputTextField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

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

jes*_*ang 26

becomeFirstResponder后来通过这条线打电话:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
                     withObject:nil 
                     afterDelay:0.1f];
Run Code Online (Sandbox Code Playgroud)

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


Wom*_*bat 9

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

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

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


Sar*_*dag 5

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

  • 您是否按 Cmd + Shift + K 使用计算机键盘?这为我显示和隐藏了模拟器的键盘。 (11认同)