【发布时间】:2018-05-27 15:08:08
【问题描述】:
我试图在加载屏幕后显示一个键盘,如下所示:
-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 40)];
tf.borderStyle = UITextBorderStyleRoundedRect;
tf.text = @"test";
[self.view addSubview:tf];
if([tf canBecomeFirstResponder]){
[tf becomeFirstResponder]; // surely this line is called
}
}
此代码适用于 ios 8、9、10,但不适用于 11。我不确定为什么在文本字段聚焦(有光标)时键盘不会在 ios 11 上自动显示。 在这种情况下,不会调用键盘的通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
- (void) keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = [note userInfo];
CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
DLog(@"Keyboard Height: %f Width: %f", kbSize.height, kbSize.width);
}
我什至试试这个:
[tf performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0];
但还是不行。
我必须点击文本字段才能调出键盘。
Apple 有什么我不知道的更新吗?
更新:我的项目或所有视图控制器似乎有问题,因为我无法让键盘显示在所有屏幕上。但是当我用上面的代码创建新项目时,它可以很好地工作。 这是问题之一:
如您所见,我必须单击文本字段才能显示键盘,并且从第二次开始,它可以正常工作。而且这个问题只发生在 ios 11(模拟器和设备)
这是上面搜索字段的代码:
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 215, 30)];
textField.backgroundColor = [UIColor clearColor];
textField.placeholder = @"Enter text to search";
textField.borderStyle = UITextBorderStyleLine;
textField.layer.masksToBounds=YES;
textField.layer.borderColor=[[UIColor lightGrayColor]CGColor];
textField.layer.borderWidth= 1.0f;
textField.returnKeyType = UIReturnKeySearch;
textField.delegate = self;
textField.clearButtonMode = UITextFieldViewModeAlways;
[UIView transitionWithView:self.navigationController.navigationBar
duration:0.55f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.navigationItem.titleView = textField;
} completion:^(BOOL finished) {
[textField becomeFirstResponder];
}];
不知道有没有什么东西会导致键盘冲突?
【问题讨论】:
-
你在模拟器上运行你的代码??如果是,通过选择模拟器切换硬件键盘,然后点击 command+shift+k
-
为什么要在
viewDidAppear方法中添加文本字段?可以多次调用。您应该在viewDidLoad中添加文本字段。您仍然可以使其成为viewDidAppear中的第一响应者。 -
@SandeepBhandari 我在设备和模拟器上都进行了测试。我已经使用切换键盘。如果我手动单击文本字段,键盘可以正确显示,但我想在屏幕加载后自动显示
-
@rmaddy 我知道,这是我尝试测试的唯一方法,以确保屏幕已加载。正如你所说,我只是在 viewdidload 中添加视图并在 viewDidAppear 中设置第一响应者,但仍然无法正常工作,键盘没有显示
-
@R4 thanx 但我解决了问题。我的应用程序中有 2 个窗口,并将 makeKeyAndVisible 设置为另一个窗口。那位裁判帮助了我developer.apple.com/library/content/qa/qa1813/_index.html
标签: ios objective-c keyboard