【问题标题】:Dissmissing Keyboard without Calling didSelectRowAtIndexPath在不调用 didSelectRowAtIndexPath 的情况下关闭键盘
【发布时间】:2016-02-20 07:20:58
【问题描述】:

我有一个 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,如何关闭键盘?我也不想破坏这个功能

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

【问题讨论】:

  • 在您的情况下,如果用户单击屏幕上的任何位置,关闭键盘是个坏主意。用户会点击哪里?它必须是表的行之一,因此是您的问题。我会在键盘上放一个完成按钮并将 resiginFirstResponder 附加到它。

标签: ios swift uitableview keyboard uitapgesturerecognizer


【解决方案1】:

让你的 tableview 的委托返回 nil 怎么样

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

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

【讨论】:

    【解决方案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
    

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

    【讨论】:

    • 该问题明确询问如何在不调用 didSelectRowAtIndexPath 的情况下做到这一点。这有什么帮助?
    • 谢谢它的工作,但是当我关闭键盘时,单元格被选中,所以我将此行添加到 if 子句 tableView.deselectRowAtIndexPath(indexPath, animated: true) 但它也单元格被选中然后取消选中
    • 请检查更新的答案,如果有帮助请告诉我。
    • 你可以在 viewDidLoad 中写下这一行。希望它能让你的 UI 更直观。
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2012-09-16
    • 2011-07-17
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多