2011-09-09 9 views
7

Để điều hướng trong ứng dụng của tôi, tôi đang sử dụng UITabBarController. Điều này hoạt động tốt, nhưng trong một trong các bộ điều khiển xem của tôi, tôi muốn đẩy một bộ điều khiển chế độ xem khác vào chế độ xem tabbar. Nói cách khác, tôi muốn thay thế bộ điều khiển xem đã chọn bằng một bộ điều khiển khác. tôi đang làm điều này với đoạn mã sau:Đẩy một bộ điều khiển xem khác vào chế độ xem UITabBarController

self.tabBarController.selectedViewController = self.otherViewController; 

Danh sách các viewControllers trong TabBarController của tôi không chứa các otherViewController. Thủ thuật này hoạt động tốt trong IOS 4.3, nhưng IOS 5 không thích nó.

Có ai biết giải pháp được iOS 5 chấp nhận không?

Trả lời

12

Bạn muốn REPLACE rằng điều khiển xem trong thanh tabbar với một điều khiển xem? Nếu vậy, bạn phải chỉnh sửa thuộc tính viewControllers trong thanh tabbar bằng cách đặt một cái mới. Nó sẽ là một cái gì đó như:

UIViewController *thisIsTheViewControllerIWantToSetNow; 
int indexForViewControllerYouWantToReplace; 

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

[tabbarViewControllers replaceObjectAtIndex:indexForViewControllerYouWantToReplace withObject:thisIsTheViewControllerIWantToSetNow]; 

self.tabbar.viewControllers = tabbarViewControllers; 

[tabbarViewControllers release]; 
+0

này hoạt động, nhưng bạn phải mất một NSMutableArray (một mutableCopy của mảng viewController của bạn) –

+0

Ồ vâng, bạn nói đúng, tôi đã gõ rằng nếu không có Xcode để làm cho tôi nhận ra replaceObjectAtIndex: withObject không tồn tại trừ khi đó là NSMUTABLEArray –

+0

Đó là wỏk, nhưng biểu tượng tabbar bị thiếu và khi tôi chạm vào một tab khác và chạm lại, khi thay đổi chế độ xem đó là "lag", tôi nghĩ – user1561904

0

Bạn không thể chỉ sử dụng bộ điều khiển điều hướng hoặc tương tự trên tab này?

Dù sao này nên làm việc:

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