未调用 didSelectCellAtIndexPath

Posted

技术标签:

【中文标题】未调用 didSelectCellAtIndexPath【英文标题】:didSelectCellAtIndexPath not called 【发布时间】:2017-09-21 14:01:39 【问题描述】:

我知道有很多相关的帖子,我已经尝试了所有我能找到的帖子,不幸的是问题仍然存在。

所以我在UIViewController 中有一个tableView,它由2 个自定义单元格填充,一个有一个UITextField,另一个有一个UISwitch,两者都有一个UILabel。然后我开始实现didSelectCell(at: IndexPath) 方法

我确保委托已连接到视图控制器。

在方法内部,我只是写了一个打印语句来确保点击正在注册。但是,当我点击UITextFieldUILabel 时,打印消息确实会打印到控制台。

我感觉这与firstResponderUITextField 有关,它正在蚕食我的点击注册,但不太确定。

欢迎任何反馈!

更新

这是我的自定义单元格上的设置:

这里是didSelect 方法:

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


        print("tapped on cell")


        if let cell = tableView.cellForRow(at: indexPath) as? NumericInputTableViewCell
            print("Tapped on numericcell")
         else if let cell = tableView.cellForRow(at: indexPath) as? BooleanInputTableViewCell 
            print("Tapped on booleancell")
        

    

【问题讨论】:

选择单元格时是否打印? 不,没有,谢谢 任何代码欢迎! 【参考方案1】:

当您单击单元格时触发委托方法,而不是单元格上的其他元素。因此,在您的表格视图中创建一些空单元格并再试一次。如果它被打印出来,那么这意味着你有元素覆盖在单元格上并且单元格本身没有被点击。

然后,您可以禁用情节提要中 UITextField 内容的用户交互,然后试一试。理想情况下,当您单击表格视图单元格上的文本字段时,我认为正确的响应是键盘会出现并且不应触发 didSelectCell

这里是演示

【讨论】:

但是按照这种逻辑,在 iPhone 上点击设置中的行应该也不起作用,因为您点击的是 UILabel 而不是单元格? @BrendonCheung 不,一切都与观点有关。您有一个超过另一个的视图,在您的情况下,您的较低视图(tableViewCell)已注册为单击事件。如果它上面的视图也注册了某个事件,例如文本字段,那么它将触发该事件,而不是下面视图上的单元格单击事件。如果它的视图没有点击事件,那么您的点击将通过它并直接到达单元格。默认情况下,图像和标签没有点击事件,这就是 didSelect 委托方法起作用的原因。默认情况下,文本字段有一个点击事件。 @BrendonCheung 这是测试它的最佳方法。单击单元格并将手指放在屏幕上。如果选择了该单元格,您将看到该单元格被单击的动画。然后当你松开手指时,didSelect 方法就会被调用。 嗨,当我按住点击时,didSelect 没有被调用,我在那个单元格内只有两个东西,一个 UITextField 和一个 UILabel @BrendonCheung 刚刚将演示附加到我的答案中。除非释放单元格,否则不会触发该方法。但是看看细胞的动画。只有在这个动画之后,你才能确定单元格被实际点击了,而不是它上面的一些其他元素

以上是关于未调用 didSelectCellAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

numberOfRowsInSection 已调用但 cellForRowAt 未调用

调用 textFieldShouldBeginEditing,未调用 textFieldDidBeginEditing

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

调用结果未使用

C# Web Api 调用未从 jquery 调用

未调用 cellForRowAtIndexPath 但调用 numberOfRowsInSection