2014-12-22 34 views
17

Tôi đang sử dụng iOS 8 UISplitViewController mới. Nếu tôi chạy nó trên iPhone, tôi có vấn đề sau:UISplitViewController trên iPhone: bật/hiển thị chế độ xem chính từ bộ điều khiển chế độ xem chi tiết

Trình điều khiển chế độ xem chính của tôi kích hoạt trình điều khiển chế độ xem chi tiết để hiển thị. Bộ điều khiển xem chi tiết đẩy một bộ điều khiển xem mới vào ngăn xếp UINavigationController trong khung nhìn chi tiết.

Bây giờ tôi gặp sự cố nếu tôi muốn quay lại trình điều khiển chế độ xem chính từ trình điều khiển chế độ xem mới.

Làm thế nào tôi có thể làm điều này

[self.navigatonController popToRootViewControllerAnimated:YES]; 

không hoạt động. Tôi muốn hiển thị bộ điều khiển chế độ xem chính trên iPhone. Vì vậy, tôi phải bật hai chế độ xem trở lại.

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này?

Trả lời

0

Tôi có cùng một vấn đề! Theo như tôi đã hiểu, splitViewController "trông" giống như một navigationController trên iPhone ("sụp đổ" splitVC), nhưng detailVC thực sự KHÔNG trên cùng một ngăn xếp điều hướng như masterVC nữa. Đó là lý do tại sao thông báo "popToRootViewController" của bạn không hoạt động nữa.

Hiện tại, tôi không tìm được cách nào. tôi sẽ cho bạn biết nếu tôi tìm thấy một giải pháp.

8

tôi chỉ tìm thấy một giải pháp trên Apple Developer Forum: How to manually 'pop' back to MasterViewController in UISplitViewController on iPhone

Khuyến cáo cũ (và có lẽ vẫn còn hiệu lực) là để cho Thầy xem intiate của pop" Để làm được điều này. xem chi tiết cần thông báo cho chế độ xem chính về cách nhấn nút tùy chỉnh của bạn. Điều này có thể đạt được bằng cách xác định giao thức, trong đó chế độ xem chính là đại biểu và chế độ xem chi tiết có biến được gọi là 'đại biểu'. tổng thể đẩy chế độ xem chi tiết nó đặt biến đại biểu này thành tự. Bây giờ khung nhìn chi tiết có một cái móc để thông báo cho khung nhìn chính.

Điều này có nghĩa để gọi từ (phụ) điều khiển xem chi tiết một chính phương pháp xem điều khiển:

(Sub) Detail View Controller:

UINavigationController *navCon = [self.splitViewController.viewControllers objectAtIndex:0]; 
MyPrimaryViewController *primary = [navCon.viewControllers objectAtIndex:0]; 

[primary popToMaster]; 

Tiểu View Controller:

- (void)popToMaster 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

Bạn là một thiên tài !!! –

+1

Để đơn giản hơn, bạn có thể thay thế phương thức VC chi tiết bằng cách: UINavigationController * navCon = [self.splitViewController.viewControllers objectAtIndex: 0]; [navCon popViewControllerAnimated: YES]; –

+0

Ngoài ra, trong trường hợp này, có vẻ như không cần thực sự xác định giao thức và đặt MasterVC làm đại biểu của DetailVC, vì bạn có thể lấy trực tiếp đến navController của primaryVC qua [self.splitViewController.viewControllers objectAtIndex: 0]. Rực rỡ, dù sao đi nữa! –

29

UIViewControllers có thuộc tính "splitViewController", vì vậy bạn có thể tham chiếu đến bộ điều khiển điều hướng thích hợp t hrough đó - và sau đó gọi popViewControllerAnimated.

Dưới đây là trong Swift (bao gồm nơi nào đó trong bộ điều khiển xem chi tiết):

if let navController = splitViewController?.viewControllers[0] as? UINavigationController { 
    navController.popViewControllerAnimated(true) 
} 
+0

Tôi không muốn tiết lộ bao nhiêu thời gian tôi lãng phí về điều này. Cảm ơn bạn rất nhiều - điều này làm việc tuyệt vời cho tôi. –

+0

Cảm ơn, bạn thân! Lifesaver! –

+0

Hal-le-lu-ur. Điều đó không rõ ràng. – pulse4life

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