выйти из режима редактирования и обновить элементы панели навигации - PullRequest
2 голосов
/ 22 марта 2012

Применительно к этому вопросу: Выйти из режима редактирования

о выходе из режима редактирования, когда удаляется последняя строка, у меня вопрос - как вы обновляете навигационную панель "редактировать" элемент? После удаления последней строки я хотел бы полностью удалить этот элемент панели навигации и выйти из режима редактирования (что делается в соответствии с приведенным ниже вопросом) и вернуть статус этой кнопки обратно на «Редактировать» (а не на «Готово», что является его состоянием). после удаления последней строки).

Вот что я делаю сейчас:

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {


...


    if ([section count] == 0) { //last row in the section
        [listOfItems removeObject:accessNumbers];    //updating my data source 
         tblSimpleTable.editing = NO; //added per the question above 
 //         self.navigationItem.rightBarButtonItem = nil; --> thats what ideally i would want to do
 //       [self setEditing:YES animated:YES]; --> adding this manually doen't help
    }
    else
    {
 ...
    }
}     


}

Спасибо за помощь!

ОБНОВЛЕНИЕ: добавление этой строки не помогает. Для выхода из режима редактирования мне нужно нажать на кнопку «Готово» на панели навигации.

[self.tblSimpleTable setEditing: YES animated: YES];

Если я также скрываю элемент навигационной панели, я вообще не могу выйти из режима редактирования, и экран завис (у меня есть другие кнопки в представлении, которые в этом случае просто не реагируют на прикосновения).

Ответы [ 4 ]

4 голосов
/ 13 марта 2013

Согласно документации Apple, вы не можете звонить [self.tableview setEditing:NO animated:YES] из вашего tableView:commitEditingStyle:forRowAtIndexPath:.Вот соответствующая выдержка:

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

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

3 голосов
/ 22 марта 2012

Можете ли вы применить это правило в другом обратном вызове?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

    BOOL answer = [section count] > 1;
    self.navigationItem.rightBarButtonItem = (answer)? self.editButtonItem : nil;
    return answer;
}
2 голосов
/ 07 октября 2016

У меня были проблемы с тем же (не удалось получить статус barButtonItem для возврата в «Редактировать» после вызова setEditing) и я узнал из этого ответа https://stackoverflow.com/a/11490594/2888978, что способ получить изменение «Редактировать» обратно на «Готово» на панели нефа - это вызвать setEditing на контроллере представления, а не на таблице. Затем вы можете установить для barButtonItem значение .None, чтобы удалить его из панели навигации, когда таблица пуста.

Так что вместо звонка:

self.tableView.setEditing(false, animated: true)

Вы бы позвонили:

self.setEditing(false, animated: true)

В противном случае изменяется только режим редактирования ячеек.

1 голос
/ 22 марта 2012

Чтобы выйти из режима редактирования, используйте это:

[self.tableview setEditing:NO animated:YES];

Чтобы полностью удалить кнопку, используйте:

// Note that this only removes the right-most button.  If you want to remove all of the buttons on the right side, use rightBarButtonItems instead.
self.navigationItem.rightBarButtonItem = nil;

// If you want it animated, use:
[self.navigationItem setRightBarButtonItem:nil animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...