我有相当多的控件分散在我的表格中的许多表格单元格中,我想知道是否有一种更简单的方法来消除键盘,而不必循环遍历所有的控件并将它们全部辞职为第一响应器。我想问题是…我如何得到当前的第一个响应器的键盘?


当前回答

我最近需要使用的一个稍微健壮一点的方法:

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

我发现其他一些“全局”方法不起作用(例如,UIWebView和WKWebView拒绝辞职)。

其他回答

Try:

[self.view endEditing:YES];

你应该发送enditing:到工作窗口作为UIView的子类

[[UIApplication sharedApplication].windows.firstObject endEditing:NO];

你必须使用其中一种方法,

[self.view endEditing:YES];

or

[self.textField resignFirstResponder];

这不是很漂亮,但是当我不知道responder是什么时,我辞去firstResponder的方式:

创建一个UITextField,无论是在IB或编程。把它隐藏起来。如果你是用IB写的,就把它链接到你的代码上。 然后,当你想要解散键盘时,你将响应器切换到不可见的文本字段,并立即辞职:

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];

是的,终止是最好的选择。从iOW 7.0开始,UIScrollView有一个很酷的功能,可以在与滚动视图交互时取消键盘。为此,你可以设置UIScrollView的keyboardDismissMode属性。

设置键盘解散模式为:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

它几乎没有其他类型。看看这个苹果文档。