15

我在我的故事板中创建了一个新的导航控制器(不是以编程方式!)并将其设置为常规 UIViewController 的“根视图控制器”,并在其中添加了一个按钮,上面写着 - 转发到下一个视图控制器(第二个视图控制器是我想要的视图控制器将有一个后退按钮链接到初始视图控制器)。现在,每当我尝试将按钮链接到下一个视图控制器时——“不支持推送导航控制器”。

请帮助我,谢谢

编辑:我不小心将 UINavigationController 子类化,而不是 UIViewController 在我的类中。还是非常感谢。

4

4 回答 4

10

我已经尝试过了,没有任何问题,它全部在 IB 中完成,不需要额外的代码......

  1. 使用故事板开始一个新项目“单一视图应用程序”
  2. 选择故事板并删除其产生的视图。
  3. 拖动一个新的导航控制器(它会带来一个表格视图)
  4. 删除表格和表格视图控制器,只剩下导航控制器
  5. 在普通视图控制器上拖动
  6. 右键单击并从导航控制器拖动到新视图并选择“关系 - 根视图控制器”
  7. 将“Bar Button Item”拖到应在 ViewController 顶部可见的 Navbar 上,如果您愿意,可以重命名此 Forward。
  8. 现在拖动另一个视图控制器,这是您的“前进”按钮将推入查看的视图。
  9. 右键单击并从栏按钮拖动到 2nd View Controller,然后选择“Push”

运行项目,您将获得一个带有导航栏和您的按钮的单一视图,单击您的按钮将推送另一个视图并给您一个后退按钮以返回到第一个视图控制器。如果有帮助,我会尝试发布我的故事板的图片。

PushViewControllers

等离子体

于 2012-05-30T15:07:58.957 回答
1

我有同样的麻烦。我想在每个故事板上都有一个导航控制器,以便每个故事板都可以独立运行,单独调试,并且导航栏的外观是正确的。

使用其他方法,我发现 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;
于 2014-04-16T07:40:02.493 回答
0

要以编程方式交换视图,您需要选择 segue 并给它一个标识符,如“PushView”,然后像这样调用它......

[self performSegueWithIdentifier:@"PushView" sender:self];

这将以编程方式与单击前进按钮相同。我已经使用上面讨论的代码为您创建了一个示例项目。有一个 -(IBAction) 代码,可用于以编程方式更改视图。

PushView.zip

于 2012-05-30T21:12:11.493 回答
0

我也想这样做,当用户按下按钮时显示一个屏幕(具有嵌入式导航控制器)。

在我第一次尝试时,我将第一个屏幕中的按钮连接到导航控制器,应用程序因“不支持推送导航控制器”错误而崩溃。

这是我找到的解决方案:

从第一个屏幕中的按钮选择 segue 到导航控制器。如果它有一个标识符,复制它的名字。然后删除那个segue。

然后通过按住 CTRL 键单击第一个视图控制器中的按钮并拖动到您想要呈现的视图控制器(而不是指向它的导航控制器)来创建一个新的转场,然后在小弹出窗口中选择推送。

然后单击 segue 中间的图标并粘贴您在第一步中复制的名称作为它的标识符。

IB 会给你一个警告“场景由于缺少入口点而无法访问,并且没有通过 -instantiateViewControllerWithIdentifier: 进行运行时访问的标识符。” 不用担心,它可以完美运行。

如果要自定义显示为返回按钮的字符串,可以在按下按钮后显示的视图控制器的 viewDidLoad 方法中添加这一行,即子视图控制器。
(将“设置”替换为您需要的名称)

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.topItem.title = @"Settings";
    ...

}
于 2016-04-19T13:48:19.117 回答