滚动上的 UITableView 不会调用 didSelectRowAtIndexPath
Posted
技术标签:
【中文标题】滚动上的 UITableView 不会调用 didSelectRowAtIndexPath【英文标题】:UITableView on scroll doesn't call didSelectRowAtIndexPath 【发布时间】:2012-02-16 21:34:48 【问题描述】:我有一个带有一个部分的 UITableView。如果我单击一个单元格,则会按预期触发 didSelectRowAtIndexPath。但是如果 tableview 的行数超过了单个屏幕中可以显示的行数,并且如果我垂直滚动 tableview 并单击一行,则不会调用 didSelectRowAtIndexPath。只有当我再次单击同一行时才会触发它。这是滚动时表格视图应该如何工作的方式吗?如果没有,有什么我想念的吗? 感谢您的帮助。
【问题讨论】:
如果表格仍在滚动,第一次触摸将停止滚动,而无需调用 didSelectRowAtIndexPath。这是你的意思吗?如果没有,请添加更多描述,也许还有一些相关的代码 sn-ps 我单击以停止滚动,然后尝试用另一个没有执行任何操作的单击选择一行。是否有您希望我发布的特定代码/方法?我所拥有的只是一个大约 20 行的简单表格视图,我在 didSelectRowAtIndexPath 方法中有一个断点,只有在我选择该行两次后才会调用它... 尝试全部粘贴。也许蒂姆是对的…… 我遇到了这个确切的问题,只有第二次点击提供了我的方法。 【参考方案1】:感谢蒂姆您的意见。添加 if 条件并没有帮助。在 nib 文件中禁用了滚动,启用它可以解决问题。再次感谢!!
【讨论】:
【参考方案2】:问题是您的 cellForRowAtIndexPath 使用出队错误。
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *SingleCellIdentifier = @"selectioncell";
UITableViewCell *selectionCell = [tableView dequeueReusableCellWithIdentifier:SingleCellIdentifier];
if(selectionCell == nil)
selectionCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SingleCellIdentifier] autorelease];
[selectionCell setSelectionStyle:UITableViewCellSelectionStyleBlue];
[selectionCell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
[[selectionCell textLabel] setText:[[possibleAnswers objectAtIndex:indexPath.row] answerText]];
这个想法是dequeueReusableCellWithIdentifier:
为您提供一个可用的单元格,但如果没有可用的单元格,则返回 nil;如果它为零,你应该自己分配它。您的代码正在获取出队的单元格,但随后忽略它并简单地分配而不管出队状态如何。试试这个,看看它是否能解决你的问题。
【讨论】:
我刚刚为这个方法验证了我的整个项目,但找不到任何以上是关于滚动上的 UITableView 不会调用 didSelectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 在使用 Swift 中的 Master Detail App 滚动之前不会重新加载
UITableView contentOffset 不会将表格一直滚动到底部
当我在 iOS 14 上的 UITableView 单元格内使用 UICollectionView 时,不会调用 UICollectionView cellForItemAt