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