iOS: editStyleForRowAtIndexPath при добавлении новой ячейки - PullRequest
1 голос
/ 23 февраля 2011

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

- (void) setEditing:(BOOL) editing animated:(BOOL) animated {
    [super setEditing:editing animated:animated];
    if (editing) {
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject: [NSIndexPath indexPathForRow:0 inSection:SECTION_SUPPLIERS]]   withRowAnimation:UITableViewRowAnimationFade];
    } 
}

Объект для создания строки "Добавить нового поставщика ...". Это работает, однако, когда таблица хочет получить стиль редактирования, чтобы она могла добавить значок плюс или минус, у меня проблема.

- (UITableViewCellEditingStyle) tableView:(UITableView *) tableView editingStyleForRowAtIndexPath:(NSIndexPath *) indexPath {
    return ([self.tableView isEditing] && indexPath.row == 0) ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete;
}

Последовательность выглядит следующим образом:

  1. Таблица переключается на редактирование. В настоящее время есть только одна строка поставщика, поэтому он запрашивает стиль редактирования со строкой == 0.
  2. Вставка новой строки завершена, после чего снова запускается другой запрос для стиля редактирования со строкой == 0.

Поэтому, если я использую эту последовательность и использую номер строки и tableView isEditing, чтобы выбрать значок стиля редактирования, я получу как строки «Добавить новый», так и текущий поставщик с иконками «плюс».

Каков наилучший способ вставить строку и назначить соответствующий стиль редактирования - плюс для добавления новой строки и минус для любой другой строки?

1 Ответ

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

Вы пытались поместить строку "Добавить новый ..." внизу, а не вверху? Вместо проверки на [indexPath row] == 0 вы вместо этого проверяете на [indexPath row] == [items count], и ваша реализация tableView:numberOfRowsInSection: выглядит следующим образом:

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
    int numberOfRows = [items count];

    if ([self isEditing]) {
        numberOfRows++;
    }

    return numberOfRows;
}

Вот как работает пример в Программирование на iPhone: Руководство ранчо «Большой ботаник».

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