Не удается получить контроль вставки в UITableView - PullRequest
1 голос
/ 20 июня 2010

Я искал по всей сети, и мой код, кажется, почти идентичен всему, но я не могу заставить работать редактирование UITableView для вставки строки.Когда я нажимаю кнопку редактирования, все мои существующие строки получают элемент управления удалением, но у меня нет дополнительной строки для вставки.Я выдергиваю волосы, потому что кажется, что это должно быть просто.Чего мне не хватает?

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [categoryTV setEditing: editing animated:animated];

    NSIndexPath *ip = [NSIndexPath indexPathForRow:[[appDelegate appCategories] count] inSection:0];

    [self.categoryTV beginUpdates];
        if (editing) {
            [categoryTV insertRowsAtIndexPaths:[NSArray arrayWithObject:ip] withRowAnimation:UITableViewRowAnimationLeft];
        } else {
            [categoryTV deleteRowsAtIndexPaths:[NSArray arrayWithObject:ip] withRowAnimation:UITableViewRowAnimationFade];          
        }
    [self.categoryTV endUpdates];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 ...

    if (indexPath.row >= [[appDelegate appCategories] count])
        cell.textLabel.text = NSLocalizedString(@"New Category", @"NewCategoryCellText");
    else
        cell.textLabel.text = [[[appDelegate appCategories] objectAtIndex:indexPath.row] detailValue];


    ....

    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (self.editing) {
        return [[appDelegate appCategories] count] + 1;
    } else {
        return [[appDelegate appCategories] count];
    }
}

Как уже отмечалось, я забыл включить мою версию предложенного метода, которая теперь показана ниже.Спасибо.

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == [[appDelegate appCategories] count]) {
        return UITableViewCellEditingStyleInsert;
    } else {
        return UITableViewCellEditingStyleDelete;
    }
}

Ответы [ 3 ]

3 голосов
/ 20 июня 2010

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

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleInsert;
}

Очевидно, вы вернете его только для той ячейки, для которой вы хотите иметь элемент управления вставкой.В противном случае вам нужно будет вернуть UITableViewCellEditingStyleDelete.

1 голос
/ 02 марта 2015

установить tableview свойство редактирования ДА

- (void)viewDidLoad {
    .......
    self.tableView.editing = YES;   //set editing property of tableview
    .......
}

редактирование - Логическое значение, определяющее, находится ли представление таблицы в режиме редактирования.

Объявление

@ property (nonatomic, getter = isEditing) Редактирование BOOL

Обсуждение

Когдазначение этого свойства - YES, представление таблицы находится в режиме редактирования: ячейки таблицы могут отображать элемент управления вставкой или удалением с левой стороны каждой ячейки и элемент управления переупорядочением с правой стороны, в зависимости от того, как ячейка находитсясконфигурировано.(Подробнее см. В справочнике по классам UITableViewCell.) При нажатии на элемент управления в табличном представлении вызывается метод источника данных tableView:commitEditingStyle:forRowAtIndexPath:. Значением по умолчанию является NO.

, затем возвращается эта ячейкав котором вы хотите иметь элемент управления вставкой

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleInsert;
}
1 голос
/ 11 августа 2012

Я видел похожее поведение в UITableView, и проблема заключалась в том, что мой метод canEditRowAtIndexPath возвратил NO для строки управления вставкой.

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