inputAccessoryView关闭键盘

Oni*_*han 8 objective-c swift

我有一个文本视图停靠在视图的底部.但是,当用户点击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)

Yuc*_*ong 7

根据Apple的文档,当用户点击键盘外,键盘默认不会被忽略UITextView.当您想通过调用解除键盘时,您需要以编程方式处理此问题commentTextField.resignFirstResponder().

有关管理键盘的UITextFiled参考

您的应用程序有责任在您选择时关闭键盘.您可以关闭键盘以响应特定的用户操作,例如用户点击用户界面中的特定按钮.要关闭键盘,请将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)