Как удалить кнопку с панели инструментов «Просмотр» контроллера на iPhone?

StackOverflow https://stackoverflow.com/questions/2618546

Вопрос

У меня есть код, который отлично работает для добавления кнопки на панель инструментов:

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 за кулисами).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top