Как удалить кнопку с панели инструментов контроллера просмотра на 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 за кулисами).

Другие вопросы по тегам