【问题标题】:UITapGestureRecognizer breaks UITableView didSelectRowAtIndexPath in SearchField Class in Swift?UITapGestureRecognizer 在 Swift 的 SearchField 类中破坏 UITableView didSelectRowAtIndexPath?
【发布时间】:2016-08-15 11:43:19
【问题描述】:

我正在将此 用于 SearchText 字段

https://github.com/apasccon/SearchTextField

这是我的代码:

  override func viewDidLoad() {
    super.viewDidLoad()


    self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector("dismissKeyboard")))


}

func dismissKeyboard()
{
    ClientList.resignFirstResponder()
    self.view.endEditing(true)

}

关闭键盘正在工作,但没有调用 didSelectRowAtIndexPath,因此我无法选择任何内容

图片供参考:

我完成的部分解决方案:

func hideKeyboard(gestureRecognizer: UIGestureRecognizer) {
        let point = gestureRecognizer.locationInView(ClientList.tableView)
        let indexPath = ClientList.tableView!.indexPathForRowAtPoint(point)

        if indexPath != nil {
            return
        }
        if ClientList.becomeFirstResponder() {
            ClientList.resignFirstResponder()
        }

    }

但现在的问题是我也有其他列表,我该如何实现其他列表?

【问题讨论】:

    标签: ios swift uitableview uisearchbar uitapgesturerecognizer


    【解决方案1】:

    你可以这样解决这个问题

    ViewDidLoad

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

    功能

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
        if touch.view != nil && touch.view!.isDescendantOfView(self.tableView) {
            return false
        }
        return true
    }
    

    【讨论】:

    • 只是将函数更新为 Swift 3 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { if touch.view != nil && touch.view!.isDescendant(of: self.tableView) { return false } return true }
    【解决方案2】:

    手势的目标是谁?我认为它应该是列表,因为它是您点击的并且位于视图上方

    【讨论】:

    • 我在 ViewController 之外点击,TableView 是另一个类,我会试试你的建议
    【解决方案3】:
            let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
        view.addGestureRecognizer(tap)
    

    将此添加到 viewDidLoad

    并添加此功能

    func dismissKeyboard() {
        //Causes the view (or one of its embedded text fields) to resign the first responder status.
        view.endEditing(true)
    }
    

    【讨论】:

    • 请再次检查问题,我已编辑。我有部分解决方案。
    • 你的代码不清楚,能不能再清楚一点
    猜你喜欢
    • 2012-01-01
    • 2012-02-18
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多