不支持导航控制器
在我的MainStoryBoard我想推一个viewController到detailView,但我得到这个错误:
NSInvalidArgumentException“,原因是:”不支持导航控制器“
我在storyboard上为viewController设置了标识符'JSA'ID。
- (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]; } }
就像rmaddy在评论中说的那样,你正试图推导一个导航控制器。
导航控制器应该呈现(通过presentViewController或者他们可以被添加为一个childViewController)和ViewControllers应该被推送。
当您谈论推动导航控制器时, 最有可能要呈现它。 但是,可能会有特定的情况,所以让我们从最简单的开始。
- 呈现 UINavigationController
这是最常见的方式,这是大多数情况下你想要做的。 UINavigationController
不能被推送,只能用一个新的根视图控制器来呈现。
MyViewController* vc = [[MyViewController alloc] initWithNibName:@"MyController" bundle:nil]; UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc]; [self presentViewController:myNav animated:YES completion:nil];
你在这里做什么,首先创build一个UINavigationController
,然后设置必要的UIViewController
作为它的根控制器。
- 推送 UINavigationController
如果你有一个ViewController的层次结构,你需要推动包含导航的视图控制器 – 如果你把这个任务称为pushing navigation controller
– 有一种方法来实现它:
** 1)推ViewController,包含UINavigationController
。
要推送你的UINavigationController
,首先创build一个UIViewController
的子类。 这将是您的UINavigationController
及其内容的包装/容器类。
ContainerViewController* vc = [[ContainerViewController alloc] init];
2)添加UINavigationController作为子视图控制器
在你的容器(你刚刚实例化)的viewDidLoad
,只需添加如下所示的内容:
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]; [dealers didMoveToParentViewController:self];
你在这里做的是基本实例化你的导航控制器,并将它作为一个子控制器添加到你的包装。 而已。 你已经成功推送你的UINavigationController。 这种方法的好处还可以指定导航栏button。 界面看起来非常整齐。