2010-10-27 15 views
5

Jak mogę usunąć UITabBarItem z UITabBar?Usuń UITabBarItem

Nie próbowałem niczego, ponieważ nie znalazłem nic z wyszukiwań w Google lub dokumentacji dla UITabBar, UITabBarController lub UITabBarItem.

Z góry dzięki! :)

+0

Cześć @esquew, co już wypróbowałeś? http://stackoverflow.com/questions/how-to-ask – jcolebrand

+0

Nie próbowałem niczego, ponieważ nie znalazłem nic z wyszukiwań Google ani dokumentacji dla 'UITabBar',' UITabBarController' lub 'UITabBarItem'. – esqew

Odpowiedz

9

UITabBar ma kolekcję przedmiotów o wartości NSArray. Ponieważ właściwość items to NSArray, a nie NSMutableArray, musisz skonstruować nową NSArray z istniejącej bez obiektu, który chcesz usunąć, a następnie ustawić właściwość items na nową tablicę.

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

Pamiętaj, że '- [NSArray mutableCopy]' jest twoim przyjacielem. Nie przeocz też '- [UITabBar setItems: animated:]'. –

+0

http://developer.apple.com jest również twoim przyjacielem;) –

4

rada Mike Caron za will throw an exception jeśli zamierzasz zmodyfikować umieszczenie zakładek, która należy do kontrolera.

w iOS 3.0 i później, nie należy próba wykorzystania metod i właściwości tej klasy zmodyfikować pasek kart gdy jest on związany z kartą kontrolera bar obiektu. Modyfikowanie paska zakładek w ten sposób powoduje odrzucenie wyjątku. Zamiast tego wszelkie modyfikacje paska tabulacji lub jego pozycji powinny zostać wprowadzone za pośrednictwem interfejsu kontrolera paska tabulacji . Nadal możesz bezpośrednio modyfikować obiekt paska kart, który nie jest powiązany z kontrolerem paska tabulacji .

W takim przypadku self.tabBarItem=nil usunie go.

+0

W iOS 11, self.tabBarItem = nil sprawia, że ​​tylko miejsce docelowe jest puste, nie przetasowuje elementów, aby wypełnić "usunięty" element. :( –

+1

https://stackoverflow.com/a/9908361/856925 ma odpowiedź, która nadal działa - usuń viewcontroller z listy tabbarcontroller viewcontrollers. –

0

UWAGA: To wydaje się nie działać w iOS 11. To wciąż dobry w iOS 10.

To straszne umiarkowanie odpowiedź, moim zdaniem, po części dlatego, że to obalenie wytyczne interfejsu człowiek, ale cały to samo wygląda na to, że działa poprawnie:

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

Układa go czysto na starym pasku i zachowuje funkcjonalność.