UITableView insertRowsAtIndexPaths не в порядке - PullRequest
1 голос
/ 23 апреля 2010

В настоящее время у меня установлен UISegmentedControl для добавления / удаления ячеек табличного представления при изменении его значения. Удаление ячеек работает отлично, однако, когда я вставляю ячейки, они в обратном порядке каждый раз.

NSArray *addindexes = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:2 inSection:0], [NSIndexPath indexPathForRow:3 inSection:0], [NSIndexPath indexPathForRow:4 inSection:0], nil];
NSArray *removeindexes = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:2 inSection:0], [NSIndexPath indexPathForRow:3 inSection:0], [NSIndexPath indexPathForRow:4 inSection:0], nil];
[self.tableView beginUpdates];

switch (switchType.selectedSegmentIndex) {
    case 0:
        [self.tableView insertRowsAtIndexPaths:addindexes withRowAnimation:UITableViewRowAnimationTop];
        break;
    case 1:
        [self.tableView deleteRowsAtIndexPaths:removeindexes withRowAnimation:UITableViewRowAnimationTop];

        break;
    default:
        break;
}

[self.tableView endUpdates];}

Например, каждый раз, когда я добавляю / удаляю ячейки, они располагаются в обратном порядке. (4, 3, 2 вместо 2, 3, 4)
1) Удалить ячейки - добавить ячейки - правильный порядок
2) Удалить ячейки - добавить ячейки - неправильный порядок
3) Удалить ячейки - добавить ячейки - правильный порядок

Ответы [ 4 ]

1 голос
/ 23 апреля 2010

Все, что показывает ваш пример кода, это индексы. Порядок отображения ячеек определяется вашим методом tableView:cellForRowAtIndexPath:.

0 голосов
/ 06 августа 2015

Я обнаружил, что в моем случае, что повторное использование значения ячейки приведет к этой проблеме, я решаю ее путем присвоения нового значения перед возвращаемой ячейкой

0 голосов
/ 24 августа 2011

Я удивлен, что никто больше не видел такого поведения. Это легко увидеть с помощью таблицы переключателей, управляемых главным выключателем. Возьмем, к примеру, это текстовое представление табличного представления с 4 разделами. При начальной загрузке все как положено:

Раздел 0

  • Строка 0 / Toggle tag - 0 (постоянный главный переключатель, вставляет / удаляет разделы 1-3)

Раздел 1

  • Строка 0 / Тег переключения - 1
  • Строка 1 / тег переключения - 2

Раздел 2

  • Строка 0 / Тег переключения: 3
  • Строка 1 / Тег переключения: 4

Раздел 3

  • Строка 0 / Тег переключения: 5

После переключения главного переключателя в положение ВЫКЛ, чтобы удалить разделы 1-3, а затем обратно в положение ВКЛ., Чтобы вставить разделы 1-3, теги переключения находятся в обратном порядке:

Раздел 0

  • Строка 0 / Toggle tag - 0 (постоянный главный переключатель, вставляет / удаляет разделы 1-3)

Раздел 1

  • Строка 0 / Тег переключения: 5
  • Строка 1 / тег переключения - 4

Раздел 2

  • Строка 0 / Тег переключения: 3
  • Строка 1 / тег переключения - 2

Раздел 3

  • Строка 0 / Тег переключения: 1

То, как я обошел эту проблему, было путем засыпания toggle.tag = myRowIteratorVariable внутри блока if( cell == nil ). Вместо этого после этого блока я установил toggle.tag в качестве идентификатора строки, который я предопределил в своих данных:

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UISwitch *toggle = nil;
    ...
    if( cell == nil )
    {
        ...
        toggle = [[UISwitch alloc] init];
        //toggle.tag = myRowIteratorVariable;
        ...
    }

    NSDictionary *section = [myTableViewSectionArray objectAtIndex:indexPath.section];
    NSArray *rowIds = [section objectForKey:@"rowIds"];
    int rowId = [[rowIds objectAtIndex:indexPath.row] intValue];
    toggle.tag = rowId;

    return cell;
}
0 голосов
/ 24 апреля 2010

Каждая ячейка создала UITextField. Чтобы это не рисовалось несколько раз, я использовал

if (!someTextField)

Это привело к тому, что ячейка не обновлялась, поскольку текстовое поле уже было нарисовано. Чтобы решить эту проблему, я просто добавил [someTextField removeFromSuperview], поскольку строка удалялась.

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