ios - 仅在 didSelectRowAtIndexPath 中长按

标签 ios swift uitableview uigesturerecognizer touchesbegan

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

我有一个自定义的 UITableView 类,我将其子类化以调用不同的东西。在我的子类中,我的用户重写了诸如 didSelectRowAtIndexPath 之类的东西。

如果我将它分配给一个表,它工作正常,除了我必须长按才能触发 didSelectRowAtIndexPath。 Tap 似乎根本不起作用。我在项目的其他地方确实有一个手势识别器,但我已经将它们全部禁用,而且我仍然没有运气让点击工作。我读过这可能与 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")
}

最佳答案

我想通了。我忘记了我有一个 UIViewController 扩展,可以在点击时关闭键盘:

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

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

        tap.cancelsTouchesInView = false

就在添加手势识别器之前。不敢相信我在这上面花了 3 个晚上。

关于ios - 仅在 didSelectRowAtIndexPath 中长按,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906854/

相关文章:

ios - 如何将步进值传递给 ViewController?

swift - 在 Swift 中访问内部字典的异常

swift - 如何将 uitableviewcellselectionstyle.none 设置为静态单元格?

ios - 动画 View Controller 并同时在 TableView 中重新加载数据

swift - 如何在动态 uitableview 中隐藏部分及其行

ios - UITableView 忽略注册单元格

ios - Xcode 中的佛兰德语本地化

ios - 无需离开应用程序即可展示广告

ios - 如何在 IOS 中使用 Facebook URL Schemes

ios - 无法将字符串转换为日期