我和UITableView's
didSelectRowAtIndexPath
有问题。
我的表是设置的,所以当我选择行时,它会初始化一个新的视图控制器并将其推送。
我第一次点击表中的任何一行时,该方法不会被调用。一旦我选择了另一行,它就会开始正常工作。
我已经通过在didSelectRowAtIndexPath
上设置断点来验证这一点。在向方法添加NSLog
时,我看到当我选择最后推送新视图控制器的第二行时,我看到同时在控制台中出现两个日志语句。
有什么建议?
您是否偶然输入了didDeselectRowAtIndexPath?
当你在tableView中使用手势识别器时也会发生这个问题,在这种情况下你不需要删除它们,你只需要确保你的手势属性cancelsTouchesInView = false
这是一个布尔值,影响触摸是否传递给一个视图当手势被识别时。
SWIFT 3
在我的案例中没有其他答案有效,为我修复的是:
tableView.delaysContentTouches = false
在第一次或第二次点击我的应用程序时没有调用didSelectRowAt
函数...我试图解决问题找不到任何解决方案。但我突然意识到,我正在使用view.animation颜色变化...动画持续时没有调用Delegate
方法
在我的情况下,我有一个带手势识别器的UITableView部分标题。当点击标题时,它应该在该部分插入几行并为插入设置动画(如展开/折叠部分)。第一次展开和点击时,未触发didSelectRow委托方法。对于进一步的点击和展开/折叠操作,它按预期工作。
根据@Ayoub Nouri的回答,我将cancelsTouchesInView设置为false,这解决了这个问题。 tapGestureRecognizer?.cancelsTouchesInView = false
还要检查xib文件中表视图的selection属性。根据需要使用“单选”或“多选”。
我遇到了以下问题:
就我而言,我的错误是在Interface Builder中检查Show Selection on Touch
。您可以在IB中取消选中它:
希望能帮助别人
检查您是否在课堂上设置了任何手势识别器。删除手势对我有用。
我甚至在发表这个答案时进行了辩论,因为我认为这些星星有点对齐以便能够表现出来。
我有这个问题的变化,并检查了其他解决方案。在我的表格视图中,它没有在第一次点击时处理我表格的最后一行。它突出了它,但didSelectRowAtIndexPath
没有被称为。所有其他行都可以正常工作。但是,如果我将tableview反弹,那么它似乎可以解决问题(但是你必须处理一个tableview反弹)。
为显示该问题的单元格设置了UITableViewCellSelectionStyleNone(ios9)。
我最后打电话了
[tableView deselectRowAtIndexPath:indexPath animated:NO];
第一件事
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
这是不一样的,但足够好。让我想知道ios10带来了什么样的桌面破损。
SWIFT 2
确保将此设置为true:
self.tableView.allowsSelection = true
在你的viewDidLoad()
之后和super.viewDidLoad()
之前把它放在你的右边
SWIFT 3
如果你在一个不是UITableViewController
的类中使用Swift 3而你正在使用UITableViewDelegate
,那么你可能需要使用方法标题:
@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}
这对我有用,虽然我刚刚将我的项目迁移到Swift 3.这是相当新的,所以这可能会在以后解决。
如果您在类中设置了任何UITapGestureRecognizer,则可以在didSelectRowAtIndexPath中添加以下行:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
这对我有用。