Триггер setEditing: анимированный: без использования кнопки редактирования


У меня есть UITableView с некоторыми пользовательскими ячейками в нем. В этих пользовательских ячейках я определил UILongPressGestureRecognizer, который запускает режим редактирования этой таблицы. Поэтому, когда кто-то нажимает и удерживает ячейку в течение примерно 1,5 секунды, таблица переходит в режим редактирования.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startEditMode:)];

Какие триггеры:

- (void)startEditMode:(UISwipeGestureRecognizer *)recognizer {

    if (self.allowEdit) {
        UITableView *table = (UITableView *)self.superview;
        [table setEditing:YES animated:YES];
    }

}
Но то, что я хочу сделать, это определить, когда таблица переходит в режим редактирования, потому что мне нужно показать/скрыть некоторые дополнительные кнопки в этом случае. Но почему-то в моем viewcontroller это никогда не выполняется:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    NSLog(@"SET EDITING");
    [super setEditing:editing animated:animated];
}

Любой предложение почему? Это просто вызывается при использовании правильной кнопки редактирования, как предусмотрено по умолчанию в UINavigationController?

Или как я могу определить, когда мой UITableView переходит в режим редактирования?

2 3

2 ответа:

Вы отправляете сообщение (setEditing) в табличное представление, вы должны отправлять его в контроллер представления (предположительно подкласс UITableViewController?). Затем он позаботится о представлении таблицы для вас.

Итак, если кто-то еще войдет в этот поток с той же проблемой, я покажу вам, как я решил эту проблему.

В моем обычае UITableViewCell теперь у меня есть этот метод:

- (void)startEditMode:(UISwipeGestureRecognizer *)recognizer {

    if (self.allowEdit) {
        UITableView *table = (UITableView *)self.superview;
        UITableViewController *control = (UITableViewController *)table.dataSource;
        [control setEditing:YES animated:YES];
    }

}