我有一个问题与UITableView的didSelectRowAtIndexPath。

我的表已经设置好了,所以当我选择row时,它会初始化一个新的视图控制器并推送它。

当我第一次点击表中的任何一行时,该方法不会被调用。一旦我选择了另一行,它就开始正常工作。

我已经通过在didSelectRowAtIndexPath上设置断点验证了这一点。当添加一个NSLog的方法,我看到,当我选择第二行,最后推动新的视图控制器,我看到两个日志语句出现在控制台同时。

有什么建议吗?


当前回答

斯威夫特3

其他的答案都不适合我,让我解决问题的是:

tableView.delaysContentTouches = false

其他回答

我在我的tableView(swift 4.2)上也有同样的问题,它可以用tableView上的allowmultipleselection属性来修复。

如果allowsMultipleSelection设置为true,表视图的选择机制将改变,通过选择每个单元格tableView didSelectRowAtIndexPath:第一次被调用,通过选择相同的单元格第二次tableView didDeselectRowAtIndexPath:被调用。

这意味着如果一个单元格被点击的次数是奇数(1,3,5,…),那么总是tableView didSelectRowAtIndexPath:将被调用,如果一个单元格被点击的次数是偶数(2,4,6,…),那么总是tableView didDeselectRowAtIndexPath:将被调用。

这使得tableView didSelectRowAtIndexPath:函数在同一单元格的第三个选择时被调用,因此结果是双击调用didSelectRowAtIndexPath:!!

如果你想让tableView didSelectRowAtIndexPath:在每个单元格的选择上被调用那么tableView multiple selection必须设为false, tableView。allowmultipleselection = false。

通过这样做,每次单元格被点击tableView didSelectRowAtIndexPath:将被调用在表格视图中,通过选择另一个单元格tableView didDeselectRowAtIndexPath:将被调用在单元格之前被选中,然后tableView didSelectRowAtIndexPath:将被调用在新选中的单元格。

    class TableViewController: UITableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.allowsMultipleSelection = false
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("This will be called for each cell tap")
    }

检查是否在类中设置了任何手势识别器。移动手势对我有用。

我遇到了以下问题:

第一次点击行->没有效果,没有选择,从来没有 第二次点击和下面->正确的选择行为,总是

在我的情况下,我的错误是在界面生成器的触摸上检查显示选择。你可以在IB中取消勾选:

希望这能帮助到别人

对我来说有用的是开始输入“didSelect…”,然后让自动更正填充剩下的部分。显然我的一些语法细节是不可靠的。正如其他人所说,使用IDE!!

didSelectRowAt函数没有被调用在我的应用程序在第一次或第二次点击… 我试图解决这个问题却找不到任何解决方法。但突然间我意识到,我用的是视图。动画颜色变化…动画持续时未调用委托方法