rimuovere UITabBarItem
-
26-09-2019 - |
Domanda
Come faccio a rimuovere un UITabBarItem
da un UITabBar
?
non ho provato nulla, perché non ho trovato nulla da ricerche di Google o la documentazione per UITabBar
, UITabBarController
o UITabBarItem
.
Grazie in anticipo! :)
Soluzione
UITabBar ha un raccolta NSArray di elementi. Dal momento che la proprietà elementi è un NSArray e non un NSMutableArray , che avrebbe dovuto costruire una nuova NSArray da quello esistente privo di oggetto che si desidera rimuovere, quindi impostare la proprietà elementi per il nuovo array.
/* suppose we have a UITabBar *myBar, and an int index idx */
NSMutableArray *modifyMe = [[myBar items] mutableCopy];
[modifyMe removeObjectAtIndex:idx];
NSArray *newItems = [[NSArray alloc] initWithArray:modifyMe];
[myBar setItems:newItems animated:true];
Altri suggerimenti
I consigli di Mike Caron un'eccezione se avete intenzione di modificare un TabBar che appartiene a un controller.
In iOS 3.0 e versioni successive, non si deve tentare di utilizzare i metodi e proprietà di questa classe di modificare la barra delle schede quando è associato con un bar scheda oggetto controller. Modifica la barra delle schede in questo modo si traduce nella lancio di un'eccezione. Invece, qualsiasi modifiche alla barra delle schede o il suo articoli dovrebbero avvenire attraverso la barra delle schede interfaccia controllore. Si può ancora modificare direttamente un oggetto scheda barra che non è associato ad una barra scheda controller.
In questo caso self.tabBarItem=nil
lo rimuoverà.
Nota: questo sembra non lavoro in iOS 11. Era ancora bene in iOS 10
.Questa è una risposta moderatamente orribile, a mio avviso, in parte perché è sovvertire le linee guida di interfaccia umana, ma lo stesso sembra funzionare in modo pulito:
UITabBar *oldbar = self.tabBarController.tabBar;
UITabBar *newbar = [[UITabBar alloc] initWithFrame:CGRectMake(0,0,oldbar.frame.size.width,oldbar.frame.size.height)];
NSMutableArray *olditems = [[oldbar items] mutableCopy];
[olditems removeObjectAtIndex:0];
NSArray *newitems = [[NSArray alloc] initWithArray:olditems];
[newbar setItems:newitems animated:false];
[oldbar addSubview:newbar];
che gli strati in modo pulito in cima alla vecchia barra delle linguette, e mantiene la sua funzionalità.