在iOS中,如何在点击UINavigationBar返回按钮后隐藏键盘

9

我的键盘与textView一起显示,我希望在用户按下导航栏上的返回按钮时隐藏它。

我尝试过以下方法:

-(void)viewWillDisappear:(BOOL)animated{

    [myTextView resignFirstResponder];
}

并且还有这个:

-(void)viewDidDisappear:(BOOL)animated{

    [myTextView resignFirstResponder];
}

但是它没有起作用,我该怎么办?

编辑:

我在这里找到了解决方案:

如果模态ViewController的呈现样式是UIModalPresentationFormSheet,则iPad键盘将无法关闭


确保IBOutlets正确绑定,并通过放置NSLog语句来调用viewDid/WillDisappear。 - Ayaz Alavi
你甚至不必手动注销第一响应者。 当视图离开屏幕时,它应自动注销并使键盘消失。 您可以通过使用“Master-Detail Application”模板为iPhone创建一个新项目来测试此行为。 打开Storyboard并转到详细屏幕。 将 UITextField 添加到视图中并运行应用程序。 当您点击字段时,键盘将出现,并且当您点击导航栏上的返回按钮时,键盘将消失。 - DBD
是真的,但当我按下一个按钮时,会出现一个模态表单视图和一个UINavigationController,我再按另一个按钮导航到另一个视图,在textView中输入时,键盘出现了,我回到之前的视图控制器,但键盘仍然存在。 - Anthony
1
我在这里找到了解决方案:https://dev59.com/sXA75IYBdhLWcg3wS3BA - Anthony
2个回答

17

把这段代码放到 buttonPress 方法中:

[self.view.window endEditing:YES];

编辑 - 这也让你在按下“后退”按钮时获取正在编辑的文本内容。


要覆盖默认的左导航栏按钮项,您需要重写它。 - Ayaz Alavi
我知道 - 相当简单明了 - SomaMan

3
将上述答案结合起来并检查后退按钮将通过此操作完成。
- (void)viewWillDisappear:(BOOL)animated{
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
    // back button was pressed.  We know this is true because self is no longer
    // in the navigation stack.
    [self.view.window endEditing:YES];
}

[super viewWillDisappear:animated];

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接