2013-07-19 20 views
29

Trong MainStoryBoard của tôi, tôi muốn đẩy một viewController đến DetailView nhưng tôi nhận được lỗi này:Đẩy một bộ điều khiển chuyển hướng không được hỗ trợ

NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'

tôi đặt định danh 'JSA' ID cho viewController trên kịch bản này.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 0) { 
     SWSJSAViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"JSA"]; 
     [self.navigationController pushViewController:viewController animated:YES]; 
    } 
} 
+40

Bạn phải đẩy bộ điều khiển chế độ xem, không phải bộ điều khiển điều hướng khác. Nếu bạn thực sự muốn hiển thị một bộ điều khiển điều hướng khác, bạn cần phải trình bày nó, không đẩy nó. – rmaddy

+0

Cảm ơn rất nhiều đã sẵn sàng, lỗi đã biến mất, nhưng nó đi đến tableViewController, tôi muốn nó trên các chi tiết, Cảm ơn – Jose

+0

Hãy xem chủ đề này http://stackoverflow.com/questions/10817305/pushing-a-navigation -controller-is-not-supported-performance-segues/23102975 # 23102975 (Tôi có một câu trả lời phù hợp với mình, nhưng có lẽ một trong số những người khác sẽ làm điều đó cho bạn.) – LordParsley

Trả lời

31

Giống như rmaddy nói trong các ý kiến ​​bạn đang cố gắng đẩy một bộ điều khiển chuyển hướng.

Bộ điều khiển điều hướng cần được trình bày (thông qua presentViewController hoặc chúng có thể được thêm dưới dạng childViewController) và ViewControllers sẽ được đẩy.

1

Khi bạn nói về đẩy Navigation Controller, nó là hầu mà bạn muốn giới thiệu nó.

  1. Trình bày UINavigationController

Đây là cách phổ biến nhất và đây là những gì bạn muốn làm trong hầu hết các trường hợp. UINavigationController không thể được đẩy, nó chỉ có thể được trình bày với một bộ điều khiển xem gốc mới.

MyViewController* vc = [[MyViewController alloc] 
     initWithNibName:@"MyController" bundle:nil]; 

UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc]; 

[self presentViewController:myNav animated:YES completion:nil]; 

Những gì bạn làm ở đây, là trước hết tạo ra một UINavigationController và sau đó thiết lập cần thiết UIViewController như bộ điều khiển gốc của nó.


  1. Đẩy UINavigationController

Nếu bạn có một hệ thống các ViewControllers và bạn cần phải đẩy quan điểm điều khiển có chứa điều khiển chuyển hướng bên trong, bước :

1) Đẩy ViewController, chứa UINavigationController.

Để đẩyUINavigationController, đầu tiên tạo ra một lớp con của UIViewController, đó sẽ là một wrapper-/container- lớp cho UINavigationController và nội dung của bạn.

ContainerViewController* vc = [[ContainerViewController alloc] init]; 

2) Thêm UINavigationController như một bộ điều khiển xem con

Trong viewDidLoad của container của bạn (mà bạn vừa khởi tạo) chỉ cần thêm một cái gì đó như thế này:

MyNavController* myNav = [[MyNavController alloc] init]; 
[myNav willMoveToParentViewController:self]; 

myNav.view.frame = self.view.frame; //Set a frame or constraints 
[self.view addSubview:myNav.view]; 
[self addChildViewController: myNav]; 
[myNav didMoveToParentViewController:self]; 

Những gì bạn làm đây là cơ bản nhanh chóng điều khiển chuyển hướng của bạn và thêm nó như là một bộ điều khiển con để wrapper của bạn. Đó là nó. Bạn đã thành công đã đẩy UINavigationController của mình.

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