我有一个textView停靠在视图的底部。但是,当用户在commentTextView外部点击时,键盘不会关闭。
当前尝试:
import UIKit
class CommentsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var commentBar: UIView!
@IBOutlet var commentTextField: UITextField!
override var inputAccessoryView: UIView {
return commentBar
}
override func canBecomeFirstResponder() -> Bool {
commentBar.removeFromSuperview()
return true
}
func textFieldShouldReturn(textField: UITextField!) -> Bool {
self.view.endEditing(true);
return false;
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true);
commentTextField.resignFirstResponder()
}发布于 2015-05-11 05:00:44
根据苹果的文档,当用户在UITextView之外点击时,默认情况下键盘不会关闭。当您想要通过调用commentTextField.resignFirstResponder()关闭键盘时,您确实需要以编程方式处理此问题。
您的应用程序负责在您选择的时间取消使用键盘。您可能会取消键盘以响应特定的用户操作,例如用户在用户界面中轻敲特定按钮。要关闭键盘,请将resignFirstResponder消息发送到当前为第一响应者的文本视图。
有许多方法可供用户隐藏键盘。
情景1:一种是用户轻触键盘上的Return按钮。这正是您的以下函数的用途:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
commentTextField.resignFirstResponder();
return true;
}但是主要的问题是上面的函数不会被调用,因为你忘了设置UITextFieldDelegate。简而言之,您需要将类定义更改为以下内容:
class CommentsViewController: UIViewController, UITextFieldDelegate /*Add This*/, UITableViewDelegate, UITableViewDataSource {
// ....
}您还必须在故事板中或通过代码设置删除。与设置UITableViewDelegate和UITableViewDataSource相同。下面是一个在代码中设置它的示例:
override func viewDidLoad() {
super.viewDidLoad()
commentTextField.delegate = self;
}Situation 2:当用户点击表视图时。您可以简单地实现以下UITableViewDelegate,它应该可以工作。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
commentTextField.resignFirstResponder();
}Situation 3:当用户点击背景视图时。这就是下面的代码所要做的。但是,当用户在表视图上点击时,不会调用此函数。如果您想知道原因,请参考responder chain了解更多详细信息。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// self.view.endEditing(true); // This line is redundant.
commentTextField.resignFirstResponder()
}总而言之,没有快速而简单的方法来消除键盘上的“当用户在textView之外点击”的说法。你确实需要根据你的需要处理所有不同的情况。

发布于 2015-05-12 18:32:07
尝试在你的tableview上设置键盘重签,如图所示。
以交互方式检查drag -dismiss上的任何-dismiss

发布于 2015-05-07 21:04:39
你添加Table View了吗?
如果是,tableViewCell将接收触摸事件,而不是controller.view。
您可以覆盖自定义tableView单元格中的方法:
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
if (xxTextField.isFirstResponder){
return viewController.view
}
return self
}另一种你可以尝试的方式,也许是可行的:
将UITapGestureRecognizer添加到controller.view。
https://stackoverflow.com/questions/29836514
复制相似问题