resignFirstResponder没有隐藏textFieldShouldReturn上的键盘

fav*_*avo 29 keyboard xcode ipad ios4

我有一个UITextField的视图,它应该在按下返回时隐藏键盘.

我的功能是:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 if ( textField == userPassword ) {
  [textField resignFirstResponder];
 }
 return YES;
}
Run Code Online (Sandbox Code Playgroud)

通常键盘应该被隐藏但它仍然在屏幕上.正确调用resignFirstResponder.我错过了什么?

Bra*_*don 49

我看到你有这个iPad标签.您是否恰好使用UIModalPresentationFormSheet呈现模态视图?如果是这样,看起来这是FormSheet模式演示的限制(Apple出于某种原因故意这样做,或者它是一个bug).有关详细信息,请参阅其他问题:

模态对话框不会关闭键盘

模式视图控制器在风景iPad上使用键盘在关闭时更改位置

  • tony.stack的答案实际上解决了这个问题. (5认同)

ton*_*ack 33

这种有用的方法允许您在呈现模态对话框时关闭键盘:

 - (BOOL)disablesAutomaticKeyboardDismissal { return NO; }
Run Code Online (Sandbox Code Playgroud)

这将覆盖Apple设置的模式对话框的默认行为,并允许您关闭键盘.它位于UIViewController类中.

我希望这可以帮助别人!

  • 我不得不继承UINavigationController并在那里添加这个方法.这是因为我的模态视图控制器Root是一个NavigationController. (4认同)
  • 这是答案!期待已久的谜团解决了. (2认同)

小智 10

如果您使用的是Interface Builder,请查看您的UITextField是否已将委托链接到您的类.

- 选择您的UITextField,并在Connections外观中退出Outlets-> delegate中的一个连接.如果没有,请与您的文件所有者类一致.

这需要与您的文件所有者类链接.该委托告诉在哪里搜索方法.如果您重写方法,则需要告诉对象将在何处搜索该方法.


gme*_*roz 7

在上述任何一项都没有之后,这个解决方案对我有用.在调用resignFirstResponder之后,我添加了一个模态视图并将其删除.



    [myTextField resignFirstResponder];
    UIViewController *dummyController = [[UIViewController alloc] init];
    UIView *dummy = [[UIView alloc] initWithFrame:CGRectMake(-1, -1,1,1)];
    [dummyController setView:dummy];
    [self presentModalViewController:dummyController animated:NO];
    [dummyController dismissModalViewControllerAnimated:NO];

Run Code Online (Sandbox Code Playgroud)