2012-05-21 21 views
11

Tôi sử dụng bảng phân cảnh iOS5 và bộ điều khiển chế độ xem ban đầu của tôi là TabBarController, có bốn mối quan hệ để xem1 & view2 & view3 & view4, vậy làm cách nào để có bộ điều khiển chế độ xem của view3?Làm cách nào để có được ViewController từ TabBarController trên AppDelegate?

tôi đã cố gắng:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2]; 

Nhưng nó không hoạt động ...

Trả lời

30

Bạn nói rằng ban đầu (root) điều khiển xem của bạn là một UITabBarController nhưng bạn đang đề cập đến một bộ điều khiển vùng đang xem với một bộ điều khiển điều hướng với bộ điều khiển thanh tab. Bạn đang nhận được trộn lẫn trong hệ thống phân cấp bộ điều khiển xem của bạn?

chỉnh sửa:

nếu điều khiển xem gốc của bạn thực sự chỉ là một bộ điều khiển thanh tab và bạn muốn để có được những tab thứ 3 ở đây là mã:

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2]; 
+0

Không @ interface có thể nhìn thấy cho 'UIViewController' tuyên bố chọn 'viewControllers' –

+2

có, nó hoạt động. Tôi thật ngu ngốc. UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; –

9
[self.tabBarController setSelectedIndex:2]; 
+2

Trong khi câu trả lời tối thiểu nhất bao giờ hết, đây là cách đơn giản và tốt nhất để có được tabBarController. UITabBarController thêm một thể loại để UIViewController trả về một UITabBarController nếu xem là một, hoặc NULL nếu nó không phải là. –

+1

Có cách nào để lấy đối tượng (bộ điều khiển xem) ở chỉ mục đã chọn không? –

7

Hãy thử cách này

Trong bất kỳ bộ điều khiển chế độ xem nào

YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3]; 

điều này sẽ trả về đối tượng điều khiển xem của bạn. Đưa nó vào bộ điều khiển xem của bạn và bạn đã sẵn sàng để sử dụng điều đó. chạy và đi

+0

Phiên bản Swift 3 của câu trả lời này là gì? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

Từ đây bạn sẽ nhận được bộ điều khiển chế độ xem được chọn.

Đối nhận được tất cả điều khiển xem chỉ cần thay thế

NSArray *viewControllers = [controller viewControllers]; 
0

Swift 4,0

let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0 
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller 

Hơn nữa bạn có thể kiểm tra ViewController Visible

if let nav = viewC as? UINavigationController { 
    if nav.visibleViewController is YourViewControllerName{ 
     // Do Code 
    } 
} 
Các vấn đề liên quan