我有一个文本视图停靠在视图的底部.但是,当用户点击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()
}
Run Code Online (Sandbox Code Playgroud)
根据Apple的文档,当用户点击键盘外,键盘默认不会被忽略UITextView.当您想通过调用解除键盘时,您需要以编程方式处理此问题commentTextField.resignFirstResponder().
您的应用程序有责任在您选择时关闭键盘.您可以关闭键盘以响应特定的用户操作,例如用户点击用户界面中的特定按钮.要关闭键盘,请将resignFirstResponder消息发送到当前第一个响应者的文本视图.
用户可以通过多种方式隐藏键盘.
情况1:一个是当用户点击键盘上的返回按钮时.这正是您的以下功能:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
commentTextField.resignFirstResponder();
return true;
}
Run Code Online (Sandbox Code Playgroud)
但主要的问题是上面的函数不会被调用,因为你忘了设置UITextFieldDelegate.简而言之,您需要将类定义更改为以下内容:
class CommentsViewController: UIViewController, UITextFieldDelegate /*Add This*/, UITableViewDelegate, UITableViewDataSource {
// ....
}
Run Code Online (Sandbox Code Playgroud)
您还必须在故事板或代码中设置删除.它与设置UITableViewDelegate和相同UITableViewDataSource.以下是在代码中设置它的示例:
override func viewDidLoad() {
super.viewDidLoad()
commentTextField.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)
情况2:当用户点击表格视图时.您只需实现以下内容即可UITableViewDelegate.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
commentTextField.resignFirstResponder();
}
Run Code Online (Sandbox Code Playgroud)
情况3:当用户点击背景视图时.这是以下代码的用途.但是,当用户点击表格视图时,不会调用此函数.如果您想知道原因,请参阅响应者链以获取更多详细信息.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// self.view.endEditing(true); // This line is redundant.
commentTextField.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)
总而言之,没有快速简便的方法来解除键盘说"当用户点击textView外".您需要根据需要处理所有不同的情况.

u54*_*54r -1
尝试这个
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true);
commentTextField.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |