在没有调用didSelectRowAtIndexPath的情况下解散键盘

时间:2015-11-18 14:01:05

标签: ios swift uitableview keyboard uitapgesturerecognizer

我有一个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)将会运行

如果我点击tableView而不调用(didSelectRowAtIndexPath),我怎么能解开键盘?而且我也不想破坏这个功能

我希望我能很好地描述这个问题 非常感谢

2 个答案:

答案 0 :(得分:2)

重写这样的didSelectRowAtIndexPath

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

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

另外:我们通常在表格视图中使用此方法。

self.tableView.keyboardDismissMode = .OnDrag

当在桌面视图中开始拖动时,这将解除键盘。

答案 1 :(得分:0)

你的tableview的委托返回nil




   - (NSIndexPath *)tableView:(UITableView *)tableView
 willSelectRowAtIndexPath:(NSIndexPath) *)indexPath
  




因为 willSelectRowAtIndexPath 可能是你想要的而不是你要求的:解雇键盘是通过发送第一个响应者 resignFirstResponder 来完成,以便回答实际问题。