У меня есть UIToolbar с кнопкой, которую я хотел бы использовать для переключения режима редактирования, чтобы включить удаление строк в моем UITableView. У меня все работает отлично, если я согласен на динамическое изменение title UIBarButton. Т.е., вы запускаете приложение и кнопка говорит "Удалить". Нажмите на него, и UITableView переключится в режим «Редактировать», и я изменю заголовок кнопки на «Готово». Нажмите его еще раз, и он выйдет из режима «Редактировать», и кнопка вернется к заголовку «Удалить».
То, что я не могу заставить работать, это то, что кнопка показывает стандартный значок корзины вместо «Удалить». Я заметил константу UIBarButtonSystemItemTrash, и она, безусловно, показывает значок корзины, если я начинаю использовать ее, но не могу заставить ее переключиться на кнопку «Готово», если я это сделаю.
Вот код, который работает для подхода изменения названия:
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
{
[self.deleteButton setTitle:@"Done"];
[self.deleteButton setStyle:UIBarButtonItemStyleDone];
}
else
{
[self.deleteButton setTitle:@"Delete"];
[self.deleteButton setStyle:UIBarButtonItemStyleBordered];
}
}
Я пробовал несколько других подходов, но ни один не помог. Вот тот, который в значительной степени игнорируется системой:
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
[self.deleteButton setStyle:UIBarButtonSystemItemDone];
else
[self.deleteButton setStyle:UIBarButtonSystemItemTrash];
}
и вот еще один хак, который, конечно, казался хакерским, но я нашел кого-то, утверждающего, что это сработает Это, к сожалению, не для меня, но все равно чувствовал себя лишним. Похоже, система тоже игнорирует это; под этим я подразумеваю то, что независимо от того, что я установил для кнопки, как в Интерфейсном Разработчике, это то, что происходит, хотя этот код выполняется.
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self action:@selector(toggleDelete)];
self.deleteButton = doneButton;
[doneButton release];
}
else
{
UIBarButtonItem *trashButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self action:@selector(toggleDelete)];
self.deleteButton = trashButton;
[trashButton release];
}
}
Я видел пару других вопросов, близких к моему сценарию, но ни один из них не помог.