【问题标题】:How to open UINavigationController Programmatically如何以编程方式打开 UINavigationController
【发布时间】:2016-06-04 15:28:13
【问题描述】:

我正在尝试以编程方式打开 UINavigationController。 这是我的代码:

UIViewController *vc = [[UIStoryboard storyboardWithName:@"Storyboard"
  bundle:nil] instantiateViewControllerWithIdentifier:@"ViewControllerID"];
UINavigationController *nc = [[UINavigationController alloc] 
   initWithRootViewController:vc];
nc.modalTransitionStyle = UIModalPresentationNone;
[self presentViewController:nc animated:YES completion:NULL];

我不断收到以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持推送导航控制器”

【问题讨论】:

  • 我已经多次像这样推送导航控制器,除了我使用 initWithNib 创建了 rootViewController(在您的代码中为 vc): bundle:我建议暂时更改 viewController 的创建(也许使用一个普通的 UIViewController 而不是你自己的类)来看看它是否有效。我猜你的问题可能是这个 viewController 是如何连接到情节提要的。
  • 我猜你的vc 实际上是UINavigationController 而不是UIViewController。您也不应该将modalTransitionStyle 设置为UIModalPresentationNone,这甚至不是正确的枚举类型。

标签: ios objective-c uinavigationcontroller


【解决方案1】:

消息非常具体。它告诉您不能以模态方式呈现导航控制器。

【讨论】:

  • 你是对的。消息特定的。我认为我们不需要一个答案来重申 Xcode 已经告诉他的内容。这个答案不能解决提问者的问题。
  • @nhgrif,用户说他们遇到了错误,甚至没有问任何问题。 隐含的问题是“我为什么会收到这个错误”。这个问题的答案是“因为你试图做的事情是不允许的”,这正是我的回答所说的。
【解决方案2】:

在视图控制器中创建导航控制器。在另一个呈现的视图控制器中添加引用的导航控制器的视图作为子视图。

【讨论】:

  • 虽然这可能有效,但它真的根本不是正确的做法。
  • 拥有一个拥有自己的导航控制器的模态不是正确的做法是什么?
  • 您建议他在视图控制器中嵌入导航控制器。这是不可能的。
【解决方案3】:

你是完全正确的,但不是展示,只是推动你的导航控制器。

例如

UIViewController *vc = [[UIStoryboard storyboardWithName:@"Storyboard"
  bundle:nil] instantiateViewControllerWithIdentifier:@"ViewControllerID"];
UINavigationController *nc = [[UINavigationController alloc] 
initWithRootViewController:vc];
[self pushViewController:nc animated:YES];

【讨论】:

    【解决方案4】:

    你应该这样做:

    UIViewController *viewControllrer = [[UIStoryboard storyboardWithName:@"Storyboard" bound :nil] instantiateViewControllerWithIdentifier:@"ViewControllerID" ]; UINavigationController *rootViewController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.navigationController pushViewController:rootViewController 动画:YES];

    【讨论】:

    • 请编辑您的问题并将源代码添加到代码块中。 (您选择代码,然后点击 {} 按钮)
    猜你喜欢
    • 2014-04-11
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多