UITableViewCell奇怪的行为

时间:2014-06-29 17:14:42

标签: ios objective-c uitableview

您好我最近遇到了UITableViewCell

的问题
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"ContentCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    CloseButton *cButton = (CloseButton *)[cell viewWithTag:20];
    [cButton addTarget:self action:@selector(deleteDetector:) forControlEvents:UIControlEventTouchUpInside];
     ...
return cell;
}

稍后,在我的删除检测器上:

-(void)deleteDetector:(id)sender {
    CloseButton *cButton = (CloseButton *)sender;

    [cButton setHidden:YES];
}

当我开始向下滚动到1000个单元格时,按钮开始出现,其中一些开始消失。

1 个答案:

答案 0 :(得分:1)

好的,所以如果我理解你的问题,我会假设发生了什么:

您正在按下单元格上的按钮,这会隐藏按钮。然后,您向下滚动,出现另一个单元格,其中已经隐藏了按钮(即使您还没有按下该行的按钮)。

这是因为您的单元格实际上正在被重用,这意味着当其中一个已隐藏按钮的单元格被重用时,该按钮仍将被隐藏(因为它实际上是同一个单元格)。快速修复'要证明这是取消隐藏tableView:cellForRowAtIndexPath:方法中的按钮,如下所示:

[cButton setHidden:NO];

在此之后的某个地方做这件事,显然:

CloseButton *cButton = (CloseButton *)[cell viewWithTag:20];

这样可以防止细胞出现时隐藏按钮,而不应该隐藏。但是,这也意味着如果你按下一个单元格上的按钮,然后它离开屏幕并重新打开,它也会再次显示该按钮,当你可能不想要它时。如果您不希望这种情况发生,您必须跟踪模型中您按下按钮的行。