我有一个停靠在视图底部的textView。但是,当用户点击commentTextView外部时,键盘不会被忽略。
当前尝试:
MID(
[Description]
, FIND([Description], "Target Name:") + 13
, FIND([Description], " ", FIND([Description], "Target Name:") + 15)
- (FIND([Description], "Target Name:") + 13)
)
答案 0 :(得分:7)
根据Apple的文档,当用户点击UITextView
之外时,键盘默认不会被忽略。如果要通过调用commentTextField.resignFirstResponder()
来关闭键盘,则需要以编程方式处理此问题。
UITextFiled Reference about Managing the Keyboard
您的应用程序有责任在您选择时关闭键盘。您可以关闭键盘以响应特定的用户操作,例如用户点击用户界面中的特定按钮。要关闭键盘,请将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;
}
情境2 :当用户点按表格视图时。您可以简单地实现以下UITableViewDelegate
,它应该可以工作。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
commentTextField.resignFirstResponder();
}
情境3 :当用户点按背景视图时。这是以下代码的用途。但是,当用户点击表格视图时,不会调用此函数。如果您想知道原因,请参阅responder chain了解更多详情。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// self.view.endEditing(true); // This line is redundant.
commentTextField.resignFirstResponder()
}
总而言之,当用户点击textView"时,没有快捷简便的方法来解除键盘说"。您需要根据需要处理所有不同的情况。
答案 1 :(得分:3)
尝试在tableview上设置键盘重新设置,如图所示。
检查任何 - 阻力消失 - 以交互方式拒绝
答案 2 :(得分:1)
你添加了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
。
答案 3 :(得分:1)
当你在我的UITextField"之外说'#34;我猜你的意思是"在我视图中的另一个元素"。我可以看到您有UITableViewDelegate
和UITableViewDataSource
,它告诉我tableView
内有CommentsViewController
。
您可以实现func tableView(_ tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath)
功能,您可以通过调用commentTextField.resignFirstResponder()
答案 4 :(得分:1)
首先,您的视图控制器需要实现UITextFieldDelegate,所以添加它。然后,将视图控制器设置为文本字段的委托
然后添加这些方法。当文本字段结束编辑时,第一个将resignFirstResponder。当你回击时,第二个辞职。点击背景时,最后一个强制文本字段结束编辑。
func textFieldDidEndEditing(textField: UITextField) {
textField.resignFirstResponder()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.commentTextField.endEditing(true)
}
答案 5 :(得分:1)
修改
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true);
commentTextField.resignFirstResponder()
}
要
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
self.view.endEditing(true)
}
它应该完成这项工作。
答案 6 :(得分:-1)
试试这个
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true);
commentTextField.resignFirstResponder()
}