长按仅在didSelectRowAtIndexPath中

时间:2016-10-06 22:55:58

标签: ios swift uitableview uigesturerecognizer touchesbegan

我问了一个类似的问题,我已经阅读了无数其他问题,但我仍然无法解决这个问题,而且我已经花了几个晚上试图解决它。

我有一个自定义的UITableView类,我已经将其子类化为不同的东西。在我的子类中,我用户覆盖了诸如didSelectRowAtIndexPath之类的东西。

如果我将它分配给一个表它可以正常工作,除了我必须长按才能触发didSelectRowAtIndexPath。 Tap似乎根本无法工作。我在项目的其他地方确实有一个手势识别器,但是我已经将它们全部禁用了,而且我仍然没有运气。我已经读到这可能与超级或触摸有关,但我觉得我现在完全陷入困境。请帮帮我!

class BaseTable: UITableView, UITableViewDelegate, UITableViewDataSource {

var rowsInSection: Int { return  0}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!

    //Standard table set up funcs

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    {
    print(IndexPath.row)
    }
}

class NewTable: BaseTable{

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {                    
        print (IndexPath.row + " NEW")
}

1 个答案:

答案 0 :(得分:23)

我想出来了。我忘记了我有一个UIViewController扩展,可以解决键盘上的问题:

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
    }

这是罪魁祸首!快速修复是添加:

        tap.cancelsTouchesInView = false

在添加手势识别器之前。不能相信我在这上面度过了3个晚上。