不支持导航控制器 – 执行segse
我在故事板中创build了一个新的导航控制器(不是以编程方式),并将其设置为“根视图控制器”为一个普通的UIViewController,并添加一个button,它说 – 转发到下一个视图控制器(这第二个视图控制器是视图控制器,我想这将有一个后退button链接到初始视图控制器)。 现在,每当我尝试链接到下一个视图控制器的button – “推动导航控制器不支持”。
请帮助我,谢谢
编辑:我不小心子类UINavigationController,而不是我的class级UIViewController。 不pipe怎样,谢谢你。
我已经尝试了这一点,没有任何问题,它在IB中完成,无需额外的代码…
- 使用故事板开始一个新项目“单一视图应用程序”
- select故事板并删除其制作的视图。
- 拖动一个新的导航控制器(它将带来一个表视图)
- 删除表格和表格视图控制器,所以你只剩下导航控制器
- 在普通的视图控制器上拖动
- 右键单击并从导航控制器拖动到新的视图,然后select“关系 – 根视图控制器”
- 拖动一个“Bar Button Item”到你的ViewController的顶部应该是可见的Navbar,如果你愿意,可以重新命名这个Forward。
- 现在拖动另一个视图控制器,这是你的“转发”button将推入查看。
- 右键单击并从栏button拖动到第二个视图控制器,然后select“推”
运行该项目,你将得到一个单视图与导航栏和button,点击你的button将推动另一个视图,并给你一个返回button返回到第一个视图控制器。 如果有帮助,我会尝试发布我的故事板的图片。
等离子体
我有同样的麻烦。 我想在每个故事板上都有一个导航控制器,这样每个故事板都可以独立运行,可以单独进行debugging,而且导航栏的外观也是正确的。
使用其他方法,我发现UINavigationController将保留在原始故事板 – 我不想要的 – 或者我会得到错误。
在你的视图控制器中使用AppDelegate来设置rootViewController为我工作(从Segue借用segue命名约定到另一个故事板? ):
- (void)showStartupNavigationController { NSLog(@"-- Loading storyboard --"); //Get the storyboard from the main bundle. UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil]; //The navigation controller, not the view controller, is marked as the initial scene. UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController]; NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController); //Remove the current navigation controller. [self.navigationController.view removeFromSuperview]; UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window]; window.rootViewController = theInitialViewController;
以编程方式交换视图,你需要selectsegue,并给它一个像“PushView”的标识符,然后像这样调用它….
[self performSegueWithIdentifier:@"PushView" sender:self];
这将编程方式与点击前进button相同。 我已经用上面讨论的代码创build了一个示例项目。 有一个 – (IBAction)代码在你可以用于编程改变视图。
PushView.zip
我也想这样做,当用户按下button时,显示一个屏幕(有一个embedded式导航控制器)。
在我第一次尝试时,我将第一个屏幕上的button连接到导航控制器,并且该应用程序崩溃,出现此错误“不支持导航控制器”。
这是我find的解决scheme:
从第一个屏幕的button中selectsegue到导航控制器。 如果它有一个标识符,请复制它的名字。 然后删除那个segue。
然后通过CTRL-点击第一个视图控制器中的button并拖动到您想要呈现的VIEW CONTROLLER (而不是指向它的导航控制器),然后在popup的小窗口中selectPush,创build一个新的Segue。
然后点击segue中间的图标,粘贴第一步复制的名称作为标识符。
IB将给你一个警告“由于缺乏入口点,场景不可访问,并且没有通过-instantiateViewControllerWithIdentifier:来访问运行时的标识符。 不要担心,它完美的作品。
如果要自定义显示为返回button的string,则可以在button被按下后显示的视图控制器的viewDidLoad方法(即子视图控制器)中添加此行。
(用你需要的名字replace“设置”)
- (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.topItem.title = @"Settings"; ... }