Повторно используемый UITableViewCells повторяющийся контент - PullRequest
0 голосов
/ 12 октября 2011

У меня очень распространенная проблема, которую я не знаю, как исправить для себя, даже после прочтения множества похожих постов, поскольку отключение многократно используемых ячеек не вариант (приложение сильно замедляется).

Проблема

Когда у меня 6 или более ячеек (максимум 16), содержимое первых 5 ячеек начинает появляться ввсе остальные ячейки, когда я прокручиваю до них.

Хотя я использую многократно используемые ячейки, почему содержимое моих ячеек не обновляется новыми данными, хранящимися в моих NSMutableArrays?1013 * Код

- (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 ]

2 голосов
/ 12 октября 2011

Вы выполняете всю конфигурацию своей ячейки, только если она создала новую ячейку, а не если она была удалена из очереди. Вытащите все из

if(worldClockCell == nil)

за исключением

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

если только вам действительно не нужно делать это один раз, когда создается ячейка (и не каждый раз, когда она переконфигурируется для отображения новых данных).

1 голос
/ 12 октября 2011

Вы должны вывести все цифровые и аналоговые часы из сферы проверки для снятой с повторного использования ячейки, и все будет хорошо.Ваш контент повторяется, потому что ячейка после прокрутки остается в поле зрения для повторного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...