可重复使用的UITableViewCells重复内容

时间:2011-10-12 17:57:20

标签: objective-c ios cocoa-touch uitableview

我有一个非常普遍的问题,我不知道如何修复自己,即使在阅读了大量相似的帖子后,因为我的单元格不可重复使用不是一个选项 (应用程序速度极慢)。

问题

当我有6个或更多个单元格(最多16个)时,当我滚动到它们时,前5个单元格的内容开始出现在所有其他单元格中。

虽然我使用的是可重复使用的单元格,为什么我的单元格内容没有被存储在我的NSMutableArrays中的新数据刷新?

守则

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

    WorldClockTableViewCell *worldClockCell = (WorldClockTableViewCell*)[tableView dequeueReusableCellWithIdentifier:kCellID];
if(worldClockCell == nil) {

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"WorldClockTableViewCell" owner:self options:nil];
    worldClockCell = [topLevelObjects objectAtIndex:0];

    /*
     Set Scrolling to OFF by default. 
     User can scroll when table is in edit mode.
     */
    [worldClockCell.scrollView setScrollEnabled:NO];

    // Set Digital Clock in timeLabel
    [self setDigitalClockInLabel:worldClockCell inRow:indexPath.row];

    // Set Analog Clock Carousel in ScrollView in every cell.
    [self setAnalogClocksInScrollView:worldClockCell inRow:indexPath.row];

    // Scroll to User's Preferred Clock (if this is the first launch of WorldClockTableViewController)
    if([[shouldAutoScrollArray objectAtIndex:indexPath.row] boolValue] == YES) {

        [self scrollToUsersPreferredClock:worldClockCell atRow:indexPath.row];
        [shouldAutoScrollArray replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:NO]];

    }   

    // Add City Name to cityLabel in every cell
    [worldClockCell buildFormattedCityName:[model.timeZoneCityNames objectAtIndex:indexPath.row]];

    // Make sure new clocks created while in 'edit' mode don't scroll out of the cell
    worldClockCell.scrollView.frame = worldClockCell.scrollViewFrame;


} 

return worldClockCell;
}

2 个答案:

答案 0 :(得分:2)

只有在创建新单元格时才进行所有单元格配置,而不是将其单元化。拉出所有东西

if(worldClockCell == nil)

除了

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"WorldClockTableViewCell" owner:self options:nil];
worldClockCell = [topLevelObjects objectAtIndex:0];

除非你真的只需要一次创建单元格(而不是每次重新配置它以显示新数据)。

答案 1 :(得分:1)

您应该将所有数字和模拟时钟移出检查范围,以便对出列的可重复使用的单元格进行检查,一切都会好的。您的内容正在重复,因为一旦滚出视图的单元格将被保留以供重复使用。