不支持导航控制器 – 执行segse

我在故事板中创build了一个新的导航控制器(不是以编程方式),并将其设置为“根视图控制器”为一个普通的UIViewController,并添加一个button,它说 – 转发到下一个视图控制器(这第二个视图控制器是视图控制器,我想这将有一个后退button链接到初始视图控制器)。 现在,每当我尝试链接到下一个视图控制器的button – “推动导航控制器不支持”。

请帮助我,谢谢

编辑:我不小心子类UINavigationController,而不是我的class级UIViewController。 不pipe怎样,谢谢你。

我已经尝试了这一点,没有任何问题,它在IB中完成,无需额外的代码…

  1. 使用故事板开始一个新项目“单一视图应用程序”
  2. select故事板并删除其制作的视图。
  3. 拖动一个新的导航控制器(它将带来一个表视图)
  4. 删除表格和表格视图控制器,所以你只剩下导航控制器
  5. 在普通的视图控制器上拖动
  6. 右键单击并从导航控制器拖动到新的视图,然后select“关系 – 根视图控制器”
  7. 拖动一个“Bar Button Item”到你的ViewController的顶部应该是可见的Navbar,如果你愿意,可以重新命名这个Forward。
  8. 现在拖动另一个视图控制器,这是你的“转发”button将推入查看。
  9. 右键单击并从栏button拖动到第二个视图控制器,然后select“推”

运行该项目,你将得到一个单视图与导航栏和button,点击你的button将推动另一个视图,并给你一个返回button返回到第一个视图控制器。 如果有帮助,我会尝试发布我的故事板的图片。

PushViewControllers

等离子体

我有同样的麻烦。 我想在每个故事板上都有一个导航控制器,这样每个故事板都可以独立运行,可以单独进行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"; ... }