滚动上的UITableView不会调用didSelectRowAtIndexPath

时间:2012-02-16 21:34:49

标签: iphone

我有一个带有一个部分的UITableView。如果单击一个单元格,则会按预期触发didSelectRowAtIndexPath。但如果tableview的行数多于单个屏幕中显示的行数,并且如果我垂直滚动tableview并单击某行,则不会调用didSelectRowAtIndexPath。仅当我再次单击同一行时才会触发它。这是滚动时tableviews应该如何运作的方式吗?如果没有,有什么我想念的吗? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

感谢蒂姆的投入。添加if条件并没有帮助。在nib文件中禁用了滚动,启用它修复了问题。再次感谢!!