Как удалить кнопку с панели инструментов «Просмотр» контроллера на iPhone?
-
26-09-2019 - |
Вопрос
У меня есть код, который отлично работает для добавления кнопки на панель инструментов:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Однако я также хочу удалить элементы панели инструментов. Когда я использую метод ниже, мои приложения вылетают:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Кто-нибудь знает, как я могу динамически изменить панель инструментов на iPhone?
Спасибо!
Решение
Изменить его в NSMutableArray
.
NSMutableArray* _toolbarItems = [NSMutableArray arrayWithCapacity: 3];
[ _toolbarItems addObjects: flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = _toolbarItems;
Когда вы хотите удалить элементы из массива:
NSInteger indexOfItem = ...
[ _toolbarItems removeObjectAtIndex: indexOfItem ];
self.toolbarItems = _toolbarItems;
Обратите внимание, что в этом случае вы не должны использовать removeObject
Так как у вас повторяются объекты в вашем массиве, а также звонить [ _toolbarItems removeObject: flexibleSpace ]
на самом деле удалит оба экземпляра flexibleSpace
в массиве
Другие советы
Чтобы удалить предметы спереди или сзади, вы можете использовать subarrayWithRange
, т.е.
NSRange allExceptLast;
allExceptLast.location = 0;
allExceptLast.length = [self.toolbarItems count] - 1;
self.toolbarItems = [self.toolbarItems subarrayWithRange:allExceptLast];
Если вы хотите удалить объекты с середины, вы можете либо использовать -[NSArray filteredArrayUsingPredicate:]
(который может быть чрезмерно сложной) или грубой силой:
NSMutableArray *mutToolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[mutToolbarItems removeObjectAtIndex:<index of object>];
self.toolbarItems = mutToolbarItems;
Обратите внимание, что вы не должны отправлять removeObjectAtIndex:
к self.toolbarItems
напрямую (даже если вы используете вышеуказанный метод), поскольку toolbarItems
выставлен как NSArray
- Вы получите предупреждение компилятора и, возможно, сбой (поскольку у вас нет контроля над тем, будет ли он фактически реализован как NSMutableArray
за кулисами).