Как удалить кнопку с панели инструментов контроллера просмотра на iPhone?
У меня есть код, который отлично работает для добавления кнопки на панель инструментов:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Однако я также хочу иметь возможность удалять элементы панели инструментов. Когда я использую метод ниже, мое приложение падает:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Кто-нибудь знает, как я могу динамически изменять панель инструментов на iPhone?
Спасибо!
2 ответа
Измените это в 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
за кулисами).