17

我得到了一个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)。

我尝试的第一件事没有用:

becomeFirstResponder我猜想 inputTextField 在被触发之前确实以某种方式没有及时可见,所以我添加了setNeedsDisplay,因为我认为这会强制更新。

[inputTextField setNeedsDisplay];
[inputTextField becomeFirstResponder];

我尝试的第二件事没有用:

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

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

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

此解决方法有效,但必须有更好的方法。请告诉我我做错了什么!:) 以及如何在自己无法复制的情况下解决此类问题?

4

4 回答 4

27

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

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

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

于 2012-08-02T02:39:29.950 回答
10

当您尝试使其成为第一响应者时,文本视图尚未完成绘制。

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

[UIView animateWithDuration:0.0 animations:^{
   [view addSubview:textView];
} completion:^(BOOL finished){
   [textView becomeFirstResponder];
}];
于 2013-05-16T19:11:12.093 回答
5

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

于 2014-09-28T17:38:14.207 回答
0

试试看能不能先显示键盘:

if([inputTextField canBecomeFirstResponder]){
    [inputTextField becomeFirstResponder];
}
于 2011-12-12T14:51:41.947 回答