Como remover um botão da barra de ferramentas de um controlador de exibição no iPhone?
-
26-09-2019 - |
Pergunta
Eu tenho código que funciona muito bem para adicionar um botão à barra de ferramentas:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;
No entanto, também quero remover itens da barra de ferramentas. Quando uso o método abaixo, meu aplicativo trava:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Alguém sabe como posso alterar dinamicamente a barra de ferramentas no iPhone?
Obrigado!
Solução
Transforme -o em um NSMutableArray
.
NSMutableArray* _toolbarItems = [NSMutableArray arrayWithCapacity: 3];
[ _toolbarItems addObjects: flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = _toolbarItems;
Quando você deseja remover os itens da matriz:
NSInteger indexOfItem = ...
[ _toolbarItems removeObjectAtIndex: indexOfItem ];
self.toolbarItems = _toolbarItems;
Observe que, neste caso, você não deve usar removeObject
Como você tem objetos repetidos em sua matriz e ligando [ _toolbarItems removeObject: flexibleSpace ]
realmente removerá as duas instâncias de flexibleSpace
na matriz
Outras dicas
Para remover itens da frente ou de trás, você pode usar subarrayWithRange
, ou seja:
NSRange allExceptLast;
allExceptLast.location = 0;
allExceptLast.length = [self.toolbarItems count] - 1;
self.toolbarItems = [self.toolbarItems subarrayWithRange:allExceptLast];
Se você quiser remover objetos do meio, você pode usar -[NSArray filteredArrayUsingPredicate:]
(que pode ser excessivamente complicado), ou força bruta:
NSMutableArray *mutToolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[mutToolbarItems removeObjectAtIndex:<index of object>];
self.toolbarItems = mutToolbarItems;
Observe que você não deve enviar removeObjectAtIndex:
para self.toolbarItems
diretamente (mesmo se você usar o método acima), pois toolbarItems
é exposto como um NSArray
-Você receberá um aviso de compilador e, possivelmente NSMutableArray
Por trás das cenas).