未调用 didSelectCellAtIndexPath
Posted
技术标签:
【中文标题】未调用 didSelectCellAtIndexPath【英文标题】:didSelectCellAtIndexPath not called 【发布时间】:2017-09-21 14:01:39 【问题描述】:我知道有很多相关的帖子,我已经尝试了所有我能找到的帖子,不幸的是问题仍然存在。
所以我在UIViewController
中有一个tableView
,它由2 个自定义单元格填充,一个有一个UITextField
,另一个有一个UISwitch
,两者都有一个UILabel
。然后我开始实现didSelectCell(at: IndexPath)
方法
我确保委托已连接到视图控制器。
在方法内部,我只是写了一个打印语句来确保点击正在注册。但是,当我点击UITextField
和UILabel
时,打印消息确实会打印到控制台。
我感觉这与firstResponder
和UITextField
有关,它正在蚕食我的点击注册,但不太确定。
欢迎任何反馈!
更新
这是我的自定义单元格上的设置:
这里是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