Как обновить строки с помощью reloadRowsAtIndexPath - PullRequest
2 голосов
/ 14 февраля 2011

Я пытаюсь удалить ячейку с помощью кнопки.

Вот реализация ячейки.

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn.frame = CGRectMake(0.f, 0.f, 30.f, 30.f);
        [btn addTarget:self 
                action:@selector(btnTouched:)
      forControlEvents:UIControlEventTouchUpInside];
      [cell addSubview:btn];
      cell.tag = indexPath.row;
    }
   return cell;
}

- (void)btnTouched:(UIButton *)sender
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag inSection:0];

    [_myMutableArray removeObjectAtIndex:sender.tag];
    [_tableView beginUpdates];
    [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                      withRowAnimation:UITableViewRowAnimationLeft];
    [_tableView endUpdates];
}

Это работает, пока я не удалю строку, кнопка не перезагружается, поэтому после удаления я не удаляю хороший индекс. Я пытался поставить reloadRowsAtIndexPaths:withRowAnimation: для visible indexPath после endUpdates метода, и он работает очень хорошо. Но анимация удаления стала безобразной из-за анимации reloadRows (даже если я установил ее на NO). Так есть ли способ перезагрузить ячейки без reloadCellsAtIndexPath. Или удалите строки без использования тегов.


Огромное спасибо.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Вы должны иметь возможность искать индекс ячейки, используя логику, подобную следующей:

NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell *)[sender superview]];

При таком подходе вам не нужно будет хранить значение индекса строки в ячейкетег.

0 голосов
/ 14 февраля 2011

Чтобы просто перезагрузить таблицу (и, следовательно, все ее ячейки), вы можете попробовать просто использовать:

[_tableView reloadData];
...