2016-02-21 16 views
5

Tôi cần truy cập UITabBarController và phần thứ hai của các bản xem trước của nó từ appDelegate.UISplitview: truy cập UITabBarController từ appDelegate

Storyboard with UISPlitViewCOntroller as root

Đây là những gì tôi đã cố gắng trong applicationDidEnterBackground:

 let splitViewController = self.window!.rootViewController as! UISplitViewController 
    let leftNavController = splitViewController.viewControllers.first as! UINavigationController 
    let tabController = leftNavController.tabBarController! as UITabBarController 
    let controllers : Array = tabController.viewControllers! 
    print("viewcontrollers \(controllers)") 

Các treo ứng dụng, phàn nàn rằng tabController là con số không. Nếu tôi loại bỏ các điều khiển UINavigation từ kịch bản, các UITabBarController được truy cập một cách dễ dàng với:

let tabController = splitViewController.viewControllers.first as! UITabBarController 

cách chính xác để truy cập childcontrollers của UITabBarController, nơi một UISplitView là gốc rễ là gì?

+0

Tại sao bạn có một bộ điều khiển chuyển hướng theo bởi một bộ điều khiển thanh tab? Bạn có thể giải thích cách bạn muốn điều hướng ứng dụng của mình như thế nào không? –

+0

Tôi rất tiếc, tôi không hiển thị toàn bộ bảng phân cảnh. Các khung nhìn được kết nối với tabbarcontroller là các tableviews, trong đó có segeus đến một detailViewController (splitview detailviewcontroller). Nếu tôi loại bỏ UINavigationController, các detailviews sẽ không còn có thanh điều hướng với các nút và nút quay lại khác nhau. –

Trả lời

4

Cuối cùng tôi đã tìm được giải pháp. Tôi đã phải sử dụng "childViewControllers" của bộ điều khiển chuyển hướng như thế này:

let splitViewController = self.window!.rootViewController as! UISplitViewController 
let leftNavController = splitViewController.viewControllers.first as! UINavigationController 
let tabController = leftNavController.childViewControllers.first as! UITabBarController 
let viewControllers : Array = tabController.viewControllers! 
print("viewControllers \(viewControllers)") 

Bây giờ tôi có thể dễ dàng truy cập bất kỳ viewControllers và chạy các phương pháp của họ từ appdelegate :-)

1

Thay vì nhúng điều khiển thanh tab của bạn trong một bộ điều khiển chuyển hướng, bạn nên nhúng các bộ điều khiển xem đứa trẻ trong bộ điều khiển chuyển hướng riêng của họ, như thế này:

Split View -> Tab Bar -> Navigation Controller #1 -> View Controller 
         -> Navigation Controller #2 -> View Controller 

Đây là cách chính xác để sử dụng một thanh tab ở kết hợp với bộ điều khiển điều hướng.

+0

Điều đó dường như không giải quyết được vấn đề. Vâng, tôi có thể truy cập vào các bản xem trước, nhưng các detailviews bây giờ sẽ xuất hiện mà không có một "backbutton". Ngoài ra họ dường như xuất hiện một cách bình thường (đi lên từ phía dưới), thậm chí tôi đã nhúng các bản xem trước trong các trình điều khiển điều hướng. –

+0

Ồ, được rồi. Vâng, tôi rất vui vì bạn đã giải quyết được vấn đề của mình :) –

Các vấn đề liên quan