0

我的 UITableViewCells 有一个 UIButton 作为他们的附件视图。在cellForRowAtIndexPath中,我使用块在后台从服务器获取数据。调用块时,我selected根据检索到的数据设置单元格中按钮的属性。

当用户快速上下滚动 TableView 时,有时会错误地设置某些按钮状态。我相信这是因为在块内使用了错误的 UITableViewCell (它是一个重用的单元格而不是实际的单元格,现在可能不在屏幕上)。

如何确保我的块内的单元格是我想要的单元格?

这是我的代码的简化版本,其中包含重要部分:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    //FoundUserCell is a subclass of UITableViewCell
    FoundUserCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentifierTableView:tableView]];    

    //set the textLabel (this works already)
    cell.textLabel = @"something";

    //fetch info from the DB that I need to state the state of the button
    //theButton is a property of FoundUserCell
    //theButton is always set to a FoundUserCell's accessoryView
    [self fetchInBackgroundWithBlock:^(int buttonState) {

        //I think that, at this point, cell is sometimes no longer the cell I want            

        if(buttonState == 0)
            cell.theButton.selected = NO;
        else
            cell.theButton.selected = YES;

        //WHAT CAN I DO INSIDE THIS BLOCK TO MAKE SURE THAT THE CELL I'M SETTING IS THE CELL I WANT?
    }];

    return cell;
}

基本上,如果单元格不是正确的单元格,我不想设置块内按钮的状态。

4

1 回答 1

1

是的,单元格将被重用(更改),所以你必须在块中找到正确的单元格,

[self fetchInBackgroundWithBlock:^(int buttonState) {
        UITableViewCell *rightCell = [tableView cellForRowAtIndexPath:indexPath];
        // code with rightCell
}];
于 2013-08-11T05:36:34.800 回答