Come faccio a rimuovere un pulsante dalla barra degli strumenti di un controller della vista su iPhone?
-
26-09-2019 - |
Domanda
Ho codice che funziona alla grande per l'aggiunta di un pulsante alla barra degli strumenti:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Tuttavia, voglio anche essere in grado di rimuovere barra degli strumenti di elementi. Quando uso il sottostante metodo, la mia domanda si blocca:
NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;
Qualcuno sa come posso modificare dinamicamente la barra degli strumenti su iPhone?
Grazie!
Soluzione
trasformarla in una NSMutableArray
.
NSMutableArray* _toolbarItems = [NSMutableArray arrayWithCapacity: 3];
[ _toolbarItems addObjects: flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = _toolbarItems;
Quando si desidera rimuovere elementi dalla matrice:
NSInteger indexOfItem = ...
[ _toolbarItems removeObjectAtIndex: indexOfItem ];
self.toolbarItems = _toolbarItems;
Nota che in questo caso non si dovrebbe usare removeObject
dal momento che avete a ripetere gli oggetti nella propria matrice, e chiamando [ _toolbarItems removeObject: flexibleSpace ]
sarà effettivamente rimuovere entrambe le istanze di flexibleSpace
nella matrice
Altri suggerimenti
Per rimuovere elementi dalla parte anteriore o posteriore, è possibile utilizzare subarrayWithRange
, cioè:.
NSRange allExceptLast;
allExceptLast.location = 0;
allExceptLast.length = [self.toolbarItems count] - 1;
self.toolbarItems = [self.toolbarItems subarrayWithRange:allExceptLast];
Se si desidera rimuovere gli oggetti dal mezzo, si potrebbe o uso -[NSArray filteredArrayUsingPredicate:]
(che potrebbe essere troppo complicato), o la forza bruta:
NSMutableArray *mutToolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[mutToolbarItems removeObjectAtIndex:<index of object>];
self.toolbarItems = mutToolbarItems;
Si noti che non si dovrebbe inviare removeObjectAtIndex:
a self.toolbarItems
direttamente (anche se si utilizza il metodo di cui sopra), dal momento che toolbarItems
è esposto come un NSArray
- avrete modo ottenere un avviso del compilatore, e possibilmente un crash (dal momento che non ha il controllo su se sarà effettivamente implementato come NSMutableArray
dietro le quinte).