【问题标题】:How can I modally present a UIViewController on another Storyboard that's embedded in a UINavigationController?如何在嵌入 UINavigationController 的另一个 Storyboard 上以模态方式呈现 UIViewController?
【发布时间】:2015-08-22 07:19:21
【问题描述】:

...并将其嵌入到导航控制器中。

我有一个故事板,我们称之为 MainStoryboard。

在主故事板上(initialViewController 顺便说一句),我有一个 ViewController,我们称之为 ViewControllerZ,嵌入在 NavigationController 中,我们称之为 NavigationControllerZ。

当用户点击按钮时……我有……

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewControllerZ *vcZ = (ViewControllerZ *)[storyboard instantiateViewControllerWithIdentifier:@"ViewControllerZ"];
vcZ.delegate = self;
vcZ.blah = blah;
[self.navigationController presentViewController:vcZ animated:YES completion:nil];

但是,这并没有为我提供所需的 NavigationController。我需要 MainStorybard 的 NavigationController,因为 ViewControllerZ 上的 NavBar 有一个 UIBarButtonItem Cancel,以关闭模态呈现的视图。

所以为了得到我试过的 NavigationController...

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
NavigationViewControllerA *navVcZ = (NavigationViewControllerZ *)[storyboard instantiateViewControllerWithIdentifier:@"NavigationViewControllerZ"];
ViewControllerZ *vcZ  = (ViewControllerZ *)navVcZ.topViewController;
vcZ.delegate = self;
vcZ.blah = blah;
[self.navigationController presentViewController:vcZ animated:YES completion:nil];

但是,这不起作用并抛出“由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'应用程序试图以模态方式呈现活动控制器”。

我该如何解决这个问题?

【问题讨论】:

  • 你在哪里工作presentViewController?你也可以分享那部分代码吗?
  • @aytunch 我正在从另一个故事板上的视图控制器中展示它。具体来说,它是视图控制器工具栏上的 uibarbuttonitem。点击它,这就是我在原始帖子中使用的确切代码。
  • 我相信同一个VC不能作为rootviewcontroller添加到两个不同的UINavigationController。阅读本文,这听起来像一个类似的问题,只是 UITabBarUIStoryBoard 不同:Sharing same VC..
  • 我仍然对它的呈现方式感到困惑。你能展示展示 VC 的代码吗?大概这就是抛出的线?该错误表明您正在展示一个已经在显示中的 VC,而不是刚刚从情节提要中加载的那个。
  • @GrahamPerks 我更新了我的问题。 [self.navigationController presentViewController:vcZ animated:YES completion:nil];

标签: ios objective-c cocoa-touch uiviewcontroller


【解决方案1】:

从错误看来,您将 navVcZ 添加为这样的子视图控制器:

[self.navigationController presentViewController:vcZ animated:YES completion:nil];
[self.navigationController addChildViewController:navVcZ];

您可以直接提交navVcZ

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
NavigationViewControllerA *navVcZ = (NavigationViewControllerZ *)[storyboard instantiateViewControllerWithIdentifier:@"NavigationViewControllerZ"];
ViewControllerZ *vcZ  = (ViewControllerZ *)navVcZ.topViewController;
vcZ.delegate = self;
vcZ.blah = blah;
[self.navigationController presentViewController:navVcZ animated:YES completion:nil];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多