2011-09-09 16 views
7

Do nawigacji w mojej aplikacji używam kontrolera UITabBarController. Działa to dobrze, ale w jednym z moich kontrolerów widoku chcę wcisnąć inny kontroler widoku do widoku zakładek. Innymi słowy chcę zamienić wybrany kontroler view na inny. Robię to z następującego kodu:Wciśnij inny kontroler widoku w widok UITabBarController.

self.tabBarController.selectedViewController = self.otherViewController; 

Lista viewControllers w moim TabBarController nie zawiera otherViewController. Ta sztuczka działa dobrze na IOS 4.3, ale IOS 5 jej nie lubi.

Czy ktoś zna rozwiązanie, które jest akceptowane przez IOS 5?

Odpowiedz

12

chcesz zastąpić tego kontrolera widoku w im zakładkami z innego widoku kontrolera? Jeśli tak, musisz edytować właściwość viewControllers na pasku zakładek, ustawiając nową. To byłoby coś jak:

UIViewController *thisIsTheViewControllerIWantToSetNow; 
int indexForViewControllerYouWantToReplace; 

NSMutableArray *tabbarViewControllers = [self.tabbar.viewControllers mutableCopy]; 

[tabbarViewControllers replaceObjectAtIndex:indexForViewControllerYouWantToReplace withObject:thisIsTheViewControllerIWantToSetNow]; 

self.tabbar.viewControllers = tabbarViewControllers; 

[tabbarViewControllers release]; 
+0

To działa, ale trzeba wziąć NSMutableArray (a mutableCopy swojej tablicy viewController) –

+0

O tak, masz rację, że nie wpisałem Xcode, aby mnie zrozumieć replaceObjectAtIndex: withObject nie istnieje, chyba że jest to NSMUTABLEArray –

+0

To jest wỏk, ale brakuje ikony paska zakładek, a kiedy dotknę innej karty i dotknę jej, zmieniając widok, to "lag", myślę – user1561904

0

Nie możesz po prostu użyć kontrolera nawigacyjnego lub podobnego na tej karcie?

W każdym razie to powinno działać:

NSMutableArray *controllers = [NSMutableArray arrayWithArray:rootTabBarController.viewControllers]; 
[controllers replaceObjectAtIndex:rootTabBarController.selectedIndex withObject: newController]; 
rootTabBarController.viewControllers = controllers; 
Powiązane problemy