我的 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;
}
基本上,如果单元格不是正确的单元格,我不想设置块内按钮的状态。