Я неправильно понимаю reloadRowsAtIndexPaths: - PullRequest
9 голосов
/ 12 ноября 2009

У меня есть сгруппированное табличное представление, где я хочу перезагрузить определенную строку. Когда я вызываю reloadRowsAtIndexPaths: строка полностью исчезает из табличного представления. Есть ли что-то еще, что мне нужно делать?

//this is the method doing the reload
-(void)setDurationTableViewCell:(NSString *)dur {

    self.workoutDuration = dur;
    NSIndexPath *durPath = [NSIndexPath indexPathForRow:3 inSection:0];
    NSArray *paths = [NSArray arrayWithObject:durPath];
    [woTableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationRight];

}//end setDurationTableViewCell


//this is the cellForRowAtIndexPath method if it has anything to do with my issue
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell;

    if (indexPath.row == 0) {

        //workout comments
        cell = [tableView dequeueReusableCellWithIdentifier:@"workoutCommentsCell"];
        if (nil == cell) { 
            cell = workoutCommentsCell;
            cell.selectionStyle = UITableViewCellStyleValue1;
        }

    }else if (indexPath.row == 1) {

        //difficulty
        cell = [tableView dequeueReusableCellWithIdentifier:@"workoutDifficultyCell"];
        if (nil == cell) { 
            cell = workoutDifficultyCell;
            cell.selectionStyle = UITableViewCellStyleValue1;
        }
        cell.textLabel.text = [NSString stringWithFormat:@"Difficulty: %@", self.workoutDifficulty];

    }else if (indexPath.row == 2) {

        //workoutDate
        cell = [tableView dequeueReusableCellWithIdentifier:@"workoutDateCell"];
        if (nil == cell) { 
            cell = workoutDateCell;
            cell.selectionStyle = UITableViewCellStyleValue1;
        }
        cell.textLabel.text = [NSString stringWithFormat:@"Date: %@", self.workoutDate];

    }else if (indexPath.row == 3) {

        //workoutDuration
        cell = [tableView dequeueReusableCellWithIdentifier:@"workoutTimerCell"];
        if (nil == cell) { 
            cell = workoutTimeCell;
            cell.selectionStyle = UITableViewCellStyleValue1;
        }
        cell.textLabel.text = [NSString stringWithFormat:@"Duration: %@", self.workoutDuration];

    }//end else-if


    return cell;

}//end cellForRowAtIndexPath

Ответы [ 4 ]

10 голосов
/ 23 мая 2011

Попробуйте обернуть ваши ReloadRowsAtIndexPaths внутри

[self.tableView beginUpdates];
[self.tableView endUpdates];

* 1004 например *

[self.tableView beginUpdates];
[woTableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationRight];
[self.tableView endUpdates]
5 голосов
/ 12 ноября 2009

Я недавно начал изучать iPhone SDK и, скорее всего, я не могу дать вам ответ ... Но вам не нужно заменять код в блоках if (nil == cell) на

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
reuseIdentifier:@"workoutTimerCell"] autorelease];
3 голосов
/ 28 июня 2016
dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
    });
3 голосов
/ 25 августа 2013

У меня была та же проблема, и, очевидно, установка withRowAnimation: на UITableViewRowAnimationNone решила ее для меня. Не могу сказать почему, но в противном случае ячейка делает хорошую анимацию, а затем исчезает.

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