iOS «проведите пальцем, чтобы удалить», не меняя состояние кнопки редактирования - PullRequest
2 голосов
/ 04 сентября 2011

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

Я добавил способ сделать это по умолчанию:

self.navigationItem.leftBarButtonItem = self.editButtonItem;

Когда вы нажимаете кнопку,он входит в режим редактирования, и кнопка превращается в кнопку «Готово».

Однако, когда я «сдвигаю, чтобы удалить» строку, в которой просто отображается кнопка удаления, существующая кнопка редактирования не меняется на «done '.

Есть ли что-то, что мне нужно сделать дополнительно, потому что я создал представление таблицы программно?

Ниже приведен код для моего просмотра таблицы:

- (void)viewDidLoad
{

    self.voucherTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 36, 320, self.view.frame.size.height - 36) style:UITableViewStylePlain];
    self.voucherTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    self.voucherTableView.delegate = self;
    self.voucherTableView.dataSource = self;
    [self.view addSubview:self.voucherTableView];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;

}

// Default table view data source methods go here

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    [self.voucherTableView setEditing:editing animated:animated];
}

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

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        // Commit the delete
    }
}

Ответы [ 4 ]

3 голосов
/ 04 сентября 2011

Вот мой ответ для вас: кнопка не меняется на «Готово», потому что слайд для удаления на самом деле не нужно делать в режиме «Редактировать» и он не переводит вас в режим редактирования.

Вы можете принудительно переключить его в режим редактирования, если хотите, когда выполняете удаление, но не знаете, зачем вам это нужно?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        [tableView setEditing:YES animated:YES];
        // Commit the delete
    }
}
1 голос
/ 13 декабря 2014

Новая функциональность, актуальная с iOS 8

Пока вы используете self.editingItem, теперь оно должно корректно обновляться самостоятельно.Фактически, в документации Apple для -tableView:commitEditingStyle:forRowAtIndexPath: теперь конкретно говорится:

Вы не должны вызывать -setEditing:animated: в рамках реализации этого метода.Если по какой-либо причине вам необходимо, вызовите его после задержки, используя метод -performSelector:withObject:afterDelay:.

Это изменение по сравнению с предыдущей функциональностью, которая упоминается в некоторых других ответах.

Следует обратить внимание на то, что, начиная с iOS 8.1.2, если вам не удастся вызвать -deleteRowsAtIndexPaths:withRowAnimation: в -tableView:commitEditingStyle:forRowAtIndexPath: (например, вызвав [self.tableView reloadData] после обновления вашей модели данных), editItem будет застревать всостояние edit .

0 голосов
/ 09 июня 2012

Попробуйте вместо этого поставить [super setEditing:editing animated:animated]; в конце метода. Это должно работать тогда.

0 голосов
/ 04 сентября 2011

@ Scrooby: заголовок и состояние кнопки редактирования не изменятся на «Готово»

Это связано с тем, что нажатие кнопки «Редактировать» запускает режим редактирования просмотра таблицы, но режим редактирования просмотра таблицы не вызывает событие для изменения заголовка кнопки на «Готово».

Предположим, что кнопка «Изменить» (событие A) и просмотр таблицы в режиме редактирования (событие B)

Событие A подразумевает Событие B, но Событие B не подразумевает Событие A.

Надеюсь, ты понял это сейчас. Это простая логика.

Надеюсь, это поможет вам.

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