Странная проблема с [tableView reloadData] - PullRequest
1 голос
/ 24 июня 2011

Позвольте иметь два изменяемых массива, и давайте иметь следующий код:

- (void)viewDidLoad
{
    NSMutableArray *A = [[NSMutableArray alloc] init];
    NSMutableArray *B = [[NSMutableArray alloc] init];
    // fill up A
    // B remains empty
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // ...
    if (...)
    {
        // fill up the cell with datas of an object from A
    }
    else
    {
        // fill up the cell with datas of an object from B
    }
    //...
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (...)
    {
        // remove an object from A and put it in B
    }
    else
    {
        // remove an object from B and put in A
    }
    [tableView reloadData];
}

Если [tableView reloadData] закомментировано (// [tableView reloadData]), то после «щелчка» таблица не будет признана недействительной, как и ожидалось. И если текущая ячейка прокручивается и прокручивается на экране снова, вызывается «cellForRowAtIndexPath», и ячейка «рисуется» в соответствии с тем, из какого массива должен быть получен его контент. Но если [tableView reloadData] активен, а cellForRowAtIndexPath не вызывается вообще (!) И ячейка удаляется с экрана!

реакция: ЧТО?

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

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Это была моя вина .. Для меня это очень хороший опыт. Метод:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [A count] + [B count];
}

содержит только [количество A] и [число B] нет. На самом деле с reloadData это правильно. В любом случае это работает из-за прокрутки вверх-вниз, пока numberOfRowsInSection больше не запрашивается.

Спасибо всем за поддержку!

0 голосов
/ 24 июня 2011

Вам необходимо использовать метод UITableView -deleteRowsAtIndexPath ..., чтобы выполнить удаление, которое вы пытаетесь достичь.Apple может не одобрить эту парадигму пользовательского интерфейса, поскольку она нарушает HIG.

Рассмотрите возможность использования свойства редактирования вместе с -commitEditingStyle ... UITableViewDatasource для выполнения удаления.Пользователи уже будут знакомы с этим использованием табличного представления, и Apple не будет отклонена.

...