我有一个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];
}
此解决方法有效,但必须有更好的方法。请告诉我我做错了什么! :)以及如何处理这样的问题而不能自己复制?
答案 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];
}