Как удалить кнопку с панели инструментов контроллера просмотра на iPhone? - PullRequest
1 голос
/ 12 апреля 2010

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

NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;

Однако я также хочу иметь возможность удалять элементы панели инструментов. Когда я использую приведенный ниже метод, мое приложение падает:

NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;

Кто-нибудь знает, как я могу динамически изменять панель инструментов на iPhone?

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Чтобы удалить элементы спереди или сзади, вы можете использовать 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 за кулисами).

1 голос
/ 12 апреля 2010

Измените его на 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 в массиве

...