【问题标题】:UITableView on scroll doesn't call didSelectRowAtIndexPath滚动上的 UITableView 不会调用 didSelectRowAtIndexPath
【发布时间】:2012-02-16 21:34:48
【问题描述】:

我有一个带有一个部分的 UITableView。如果我单击一个单元格,则会按预期触发 didSelectRowAtIndexPath。但是如果 tableview 的行数超过了单个屏幕中可以显示的行数,并且如果我垂直滚动 tableview 并单击一行,则不会调用 didSelectRowAtIndexPath。只有当我再次单击同一行时才会触发它。这是滚动时表格视图应该如何工作的方式吗?如果没有,有什么我想念的吗? 感谢您的帮助。

【问题讨论】:

  • 如果表格仍在滚动,第一次触摸将停止滚动,而无需调用 didSelectRowAtIndexPath。这是你的意思吗?如果没有,请添加更多描述,也许还有一些相关的代码 sn-ps
  • 我单击以停止滚动,然后尝试用另一个没有执行任何操作的单击选择一行。是否有您希望我发布的特定代码/方法?我所拥有的只是一个大约 20 行的简单表格视图,我在 didSelectRowAtIndexPath 方法中有一个断点,只有在我选择该行两次后才会调用它...
  • 尝试全部粘贴。也许蒂姆是对的……
  • 我遇到了这个确切的问题,只有第二次点击提供了我的方法。

标签: iphone


【解决方案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;如果它为零,你应该自己分配它。您的代码正在获取出队的单元格,但随后忽略它并简单地分配而不管出队状态如何。试试这个,看看它是否能解决你的问题。

    【讨论】:

    • 我刚刚为这个方法验证了我的整个项目,但找不到任何
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多