2010-10-27 11 views
5

Come rimuovere un UITabBarItem da un UITabBar?Rimuovi UITabBarItem

Non ho provato nulla, perché non ho trovato nulla da ricerche di Google o la documentazione per UITabBar, UITabBarController o UITabBarItem.

Grazie in anticipo! :)

+0

Ciao @esqew, cosa hai già provato? http://stackoverflow.com/questions/how-to-ask – jcolebrand

+0

Non ho provato nulla, perché non ho trovato nulla da ricerche di Google o la documentazione di 'UITabBar',' UITabBarController', o 'UITabBarItem'. – esqew

risposta

9

UITabBar ha una raccolta di articoli NSArray. Poiché la proprietà items è un NSArray e non uno NSMutableArray, dovresti costruire un nuovo NSArray da quello esistente privo dell'oggetto che vuoi rimuovere, quindi impostare la proprietà items sul 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]; 
+3

Ricorda, '- [NSArray mutableCopy]' è tuo amico. Inoltre, non trascurare '- [UITabBar setItems: animated:]'. –

+0

http://developer.apple.com è anche tuo amico;) –

4

i consigli di Mike Caron will throw an exception se avete intenzione di modificare un TabBar che appartiene a un controller.

in iOS 3.0 e versioni successive, non si deve tentativo di utilizzare i metodi e proprietà di questa classe di modificare la barra scheda quando è associata a un oggetto controller bar scheda. Modificando la barra delle schede in questo modo provoca il lancio di un'eccezione . Invece, qualsiasi modifica alla barra delle schede o le sue voci dovrebbero avvenire tramite l'interfaccia del controller della barra delle linguette. È comunque possibile modificare direttamente un oggetto barra di schede che non è associato a una barra di schede controller.

In questo caso lo si rimuoverà self.tabBarItem=nil.

+0

In iOS 11, self.tabBarItem = nil rende lo spot vuoto vuoto, in realtà non mescola gli elementi per riempire l'elemento "rimosso". :( –

+1

https://stackoverflow.com/a/9908361/856925 ha una risposta che funziona ancora - rimuovere il viewcontroller dall'elenco dei checkcontrollers tabbarcontroller. –

0

NOTA: questo sembra non funzionare in iOS 11. Era ancora bene in iOS 10.

Questa è una risposta moderatamente orribile, a mio avviso, in parte perché è sovvertire le Human Interface Guidelines, ma tutti 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 sulla parte superiore della vecchia barra delle linguette, e mantiene la sua funzionalità.

Problemi correlati