2010-10-27 9 views
5

Wie kann ich ein UITabBarItem von einem UITabBar entfernen?Entfernen UITabBarItem

Ich habe nichts versucht, weil ich nichts gefunden habe von Google-Suchen oder der Dokumentation für UITabBar, UITabBarController oder UITabBarItem.

Vielen Dank im Voraus! :)

+0

Hallo @esqew, was hast du schon probiert? http://stackoverflow.com/questions/how-to-ask – jcolebrand

+0

Ich habe nichts versucht, weil ich nichts gefunden habe von Google-Suchen oder der Dokumentation für 'UITabBar',' UITabBarController' oder 'UITabBarItem'. – esqew

Antwort

9

UITabBar hat eine NSArray Sammlung von Elementen. Da die items -Eigenschaft ein NSArray und kein NSMutableArray ist, müssten Sie ein neues NSArray aus dem vorhandenen ohne das Objekt erstellen, das Sie entfernen möchten, und dann die items -Eigenschaft auf das neue Array festlegen.

/* 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

Denken Sie daran, '- [NSArray mutableCopy]' ist dein Freund. Übersehen Sie auch nicht '- [UITabBar setItems: animated:]'. –

+0

http://developer.apple.com ist auch dein Freund;) –

4

Mike Caron Rat will throw an exception, wenn Sie einen tabBar zu ändern beabsichtigen, die mit einem Controller gehört.

In iOS 3.0 und höher, sollten Sie nicht Versuch, die Methoden und Eigenschaften dieser Klasse zu verwenden, um die Tab-Leiste zu ändern, wenn es mit einem Tableiste Controller-Objekt zugeordnet ist. Die Änderung der Registerkarte auf diese Weise führt dazu, dass eine Ausnahme ausgelöst wird. Stattdessen sollten alle Änderungen an der Registerkartenleiste oder den Elementen über die Registerkartenleiste Controller-Schnittstelle erfolgen. Sie können weiterhin direkt ein Tab-Bar-Objekt ändern, das nicht mit einer Tab-Leiste Controller verknüpft ist.

In diesem Fall self.tabBarItem=nil wird es entfernen.

+0

In iOS 11 macht self.tabBarItem = nil nur den Haltepunkt leer, es mischt nicht wirklich die Elemente, um den "entfernten" Gegenstand zu füllen. :( –

+1

https://stackoverflow.com/a/9908361/856925 hat eine Antwort, die immer noch funktioniert - entfernen Sie den Viewcontroller aus der tabbarcontroller Viewcontrollers Liste. –

0

HINWEIS: dies scheint nicht 11. Es war immer noch gut in iOS 10.

Dies ist eine mäßig schreckliche Antwort, meiner Meinung nach, teilweise in iOS zu arbeiten, weil es die menschliche Schnittstelle Richtlinien Grabung ist, aber alle das gleiche scheint es sauber zu arbeiten:

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]; 

Diese Schichten es sauber auf dem alten Tabbar, und es seine Funktionalität beibehält.

Verwandte Themen