我有一个非常普遍的问题,我不知道如何修复自己,即使在阅读了大量相似的帖子后,因为我的单元格不可重复使用不是一个选项 (应用程序速度极慢)。
问题
当我有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;
}
答案 0 :(得分:2)
只有在创建新单元格时才进行所有单元格配置,而不是将其单元化。拉出所有东西
if(worldClockCell == nil)
除了
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"WorldClockTableViewCell" owner:self options:nil];
worldClockCell = [topLevelObjects objectAtIndex:0];
除非你真的只需要一次创建单元格(而不是每次重新配置它以显示新数据)。
答案 1 :(得分:1)
您应该将所有数字和模拟时钟移出检查范围,以便对出列的可重复使用的单元格进行检查,一切都会好的。您的内容正在重复,因为一旦滚出视图的单元格将被保留以供重复使用。