在不调用 didSelectRowAtIndexPath 的情况下关闭键盘

Dissmissing Keyboard without Calling didSelectRowAtIndexPath

我有一个 ViewController,它有 textSearchTableView:UITableView 和 searchBar:UISearchBar

我添加了UITapGestureRecognizer来关闭键盘

override func viewDidLoad() {

// ...

self.tap = UITapGestureRecognizer(target: self, action: "DissmissKeyboard")
        self.tap.delegate = self
        self.view.addGestureRecognizer(self.tap)
// ...

}

func DissmissKeyboard()
    {
        view.endEditing(true)
    }

我添加了此功能以防止在选择单元格后破坏 (didSelectRowAtIndexPath) 功能

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
        if touch.view.isDescendantOfView(self.textSearchTableView) {
        return false
        }
        return true
    }

但问题是:当键盘启用时我想关闭它,

如果我单击 textSearchTableView,(didSelectRowAtIndexPath) 将 运行

如果我在不调用 (didSelectRowAtIndexPath) 的情况下单击 tableView,如何关闭键盘?我也不想破坏这个功能

希望我把问题描述的很好 非常感谢

让你的 tableview 的委托 return nil for

怎么样
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath

因为 willSelectRowAtIndexPath 可能是您想要的,但不是您要求的:通过发送第一响应者 resignFirstResponder 来关闭键盘,以便回答实际问题。

像这样重写你的didSelectRowAtIndexPath

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if (self.searchBar.isFirstResponder())
    {
        self.searchBar.resignFirstResponder()
    }
    else
    {
        //Do something here
    }
}

或者:我们通常在表格视图中使用这种方法。

self.tableView.keyboardDismissMode = .OnDrag

这将在表格视图中开始拖动时关闭键盘。