15

Tôi có quan điểm và bộ điều khiển được thiết lập như vậy.Truy cập Trình điều khiển Điều hướng Hàng đầu từ Trình điều khiển Điều hướng của Chế độ xem Phụ

  1. Một bộ điều khiển Tab/Bar
  2. Trong vòng 1. là một bộ điều khiển xem gốc
  3. trong vòng 2. là một bộ điều khiển chuyển hướng lập trình tạo ra, mà sẽ được hiển thị như là một subview trong bộ điều khiển xem gốc.

Điều tôi đang cố làm là truy cập thanh tab/bộ điều hướng điều hướng trên cùng để tôi có thể đẩy chế độ xem lên đó.

Tôi đã thử parentViewController nhưng tất cả những gì nó đã làm là đẩy chế độ xem vào bộ điều khiển điều hướng được lập trình.

bất kỳ đề xuất nào?

Đây là cách tôi thiết lập bộ điều khiển xem gốc của tôi:

-(void)viewDidAppear:(BOOL)animated{ 
    NSLog(@"ROOT APPEARED"); 
    [super viewDidAppear:animated]; 

    WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]]; 
    UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController]; 
    worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque; 
    worklistNavController.view.frame = watchlistView.frame; 
    [worklistNavController.topViewController viewDidLoad]; 
    [worklistNavController.topViewController viewWillAppear:YES]; 
    [self.view addSubview:worklistNavController.view]; 

    GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]]; 
    UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController]; 
    alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque; 
    alertsNavController.view.frame = alertsView.frame; 
    [alertsNavController.topViewController viewDidLoad]; 
    [alertsNavController.topViewController viewWillAppear:YES]; 
    [self.view addSubview:alertsNavController.view]; 
} 

Trả lời

31

Một ViewController lồng nhau (ví dụ, bên trong một cái nhìn điều khiển bởi một ViewController đó là thực sự trên stack NavController) không có quyền truy cập trực tiếp đến UINavigationController rằng mẹ của bộ điều khiển của chế độ xem là một thành viên ngăn xếp của. Đó là một MOUTHFUL của một câu, nhưng ý nghĩa của nó là: bạn không thể đến đó từ đây.

Thay vào đó bạn phải vào NavController của ứng dụng thông qua ứng dụng ủy nhiệm.

YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate; 
[del.navigationController pushViewController:nextViewController animated:YES]; 

Bạn đang sử dụng singleton của UIApplication của bạn (bao gồm tất cả các loại thông tin tốt về ứng dụng của bạn), trong đó có một tài sản chỉ vào appdelegate .delegate, và có chứa một tham chiếu đến NavigationController.

Đây là cách mà mẫu Xcode "Ứng dụng dựa trên điều hướng" thiết lập quyền sở hữu của NavController. YMMV nếu bạn cuộn của riêng bạn - mặc dù nếu bạn đã làm, bạn có thể sẽ không cần phải đặt câu hỏi này.

+1

Với iOS 4.0 là mục tiêu triển khai, mã 'del.navigationController' tạo lỗi xây dựng: "Yêu cầu chuyển hướng thành viênController trong thứ gì đó không phải là cấu trúc hoặc công đoàn" –

+0

@ Marcel - Ứng dụng của bạn ủy quyền HAS một bộ điều khiển điều hướng làm thuộc tính được đặt tên, đúng? –

+1

lỗi: thuộc tính 'navigationController' không tìm thấy trên đối tượng thuộc loại 'AppDelegate *' –

0

Có xem xét tính navigationController và tabBarController UIViewController của. Chúng sẽ trả về navigationController tương ứng hoặc tabBarController mà UIViewController đã cho là 'thuộc'.

Vì vậy, bạn có thể làm điều gì đó như:

[customController.navigationController pushViewController:newController animated:YES]; 
// Similarly for tabBarController ... 
+0

Tôi là một chút nhầm lẫn vào những gì bạn có ý nghĩa. Ngăn xếp sẽ trông như thế này. 1.Navigation Controller -> RootViewController -> 2.Navigation Controller -> AViewConroller Và những gì tôi muốn là cho AViewController để đẩy một viewcontroller mới vào 1. điều khiển điều khiển. Nhưng Không có vấn đề gì tôi cố gắng nó giữ đẩy nó lên 2. điều khiển điều khiển? Nếu điều đó làm cho nó rõ ràng hơn. Lấy làm tiếc. – Matt

+0

Xin chào, tôi đã cập nhật bài đăng của tôi để phù hợp với nhận xét của bạn. Đó là một chút lạ để ngăn xếp hai bộ điều khiển chuyển hướng vì một trong những điều tương tự như một trong những khác. Anyways kiểm tra đề nghị của tôi vì nó có thể làm việc, nhưng tôi không chắc chắn 100%. – nebs

+0

Xin lỗi tôi biết điều đó thật kỳ lạ Tôi đã không thực sự đưa ra một nền tảng. Tôi có một bộ điều khiển thanh tab có 3 tab/bộ điều khiển. 1.Trang chủ 2. Tìm kiếm 3. Cài đặt. Trong chế độ xem gốc, có 3 bảng khác nhau có các nút điều khiển xem bảng điều khiển. Các cảnh báo này hiển thị, danh sách theo dõi và các tìm kiếm trước đó. Vì vậy, trong bộ điều khiển xem danh sách theo dõi khi bạn nhấn xem tài liệu mũi tên, tôi muốn nó chiếm quyền điều khiển điều hướng trên cùng để nó hiển thị toàn bộ màn hình. Nhưng không may rằng mã bạn đã cho tôi đã không làm việc. – Matt

10

Bạn có thể sử dụng instruccion sau:

[(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES]; 

Nó làm việc cho tôi: D

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