只有在didSelectRowAtIndexPath中长按

11

我曾经提出过类似的问题,并且阅读了无数其他问题,但我仍然无法弄清楚,已经花费了几个晚上来尝试解决。

我有一个自定义的UITableView类,我已经创建了子类来调用不同的内容。在我的子类中,我使用了一些override方法,如didSelectRowAtIndexPath。

如果我将它分配给一个表格,它可以正常工作,除了我必须长按才能触发didSelectRowAtIndexPath。轻击似乎根本不起作用。我在项目的其他地方确实有一个手势识别器,但我已经禁用了它们所有,并且仍然无法让轻击起作用。我读到可能与supers或touchesbegan有关,但现在感觉完全陷入了困境。请帮帮我!

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")
}

请点击以下链接查看答案:https://dev59.com/v14c5IYBdhLWcg3wAWLv - Joe
不是 @Sam_M,这是一个包含在视图控制器中的表视图。我已经将一个表视图子类分配给它了。视图控制器中也没有手势识别器。 - LateNate
很遗憾,我的项目中完全没有这个。 - LateNate
当您不使用子类而是使用UITableView时,您是否遇到了相同的问题? - charmingToad
@charmingToad 不是的。当我在ViewController中设置表格时,一切都很正常。只有当我使用子类时,才会失去轻触功能。 - LateNate
显示剩余5条评论
1个回答

35
我找到了解决方法。我忘记了我有一个UIViewController扩展,可以在点击时隐藏键盘:
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
    }

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

        tap.cancelsTouchesInView = false

在添加手势识别器之前。简直不敢相信我在这上面浪费了三个晚上。


2
救命稻草。这真是个大帮助! - thedansaps
2
你是我的英雄。 - MattBlack
如果你发现了这个问题,请检查你的类中是否有任何GestureRecognizer方法。它很可能是导致这个问题的原因。 - subin272
也非常帮助我!谢谢 @LateNate - Nazar Medeiros
如果我能给你10个赞,我会的。已经试了好几天来修复这个问题。终于在谷歌上找到了正确的解决方法。 - Adam B
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接