参考从模态(objective-c)呈现视图控制器

Posted

技术标签:

【中文标题】参考从模态(objective-c)呈现视图控制器【英文标题】:Reference presenting view controller from modal (objective-c) 【发布时间】:2015-07-19 17:55:33 【问题描述】:

我有一个导航堆栈,包括:

UINavigationViewController
 -> WelcomeViewController
 -> RoleViewController

我想在 Welcome 和 Role 之间添加一个模态视图控制器。我通过情节提要添加了一个 ModalViewController,并从 WelcomeViewController 中的一个按钮为 ModalViewController 分配了一个 segue (Present Modally)。一切都很好,模态显示也很好。

现在我在 ModalViewController 我想关闭模式并从 Welcome to Role 执行原始 segue。我在 *** 上进行了一些搜索,并对如何做到这一点提出了不同的看法。这里列出了最合乎逻辑的方式: Dismissviewcontroller and perform segue

UIViewController *parentController = self.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^(void)
    [parentController performSegueWithIdentifier:@"segue_gotoRole" sender:self];
];    

模态被解除但segue没有被执行并且应用程序崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Receiver (<NavigationViewController: 0x78b96b80>) has no segue
with identifier 'segueToRole''

所以 self.presentingViewController 的目标是 UINavigationViewController 而不是实际呈现模式的视图控制器 WelcomeViewController。 为了成功,我需要找到一种方法来获取演示视图控制器,该控制器在情节提要中定义为模态中的 segue 发起者

我尝试了很多不同的组合,例如self.parentViewController,self.presentationViewController,我什至尝试遍历导航堆栈以挑出 WelcomeViewController 并将其专门定位为执行 segue 的对象,但似乎没有任何效果。

请帮助我。 :)

【问题讨论】:

你是从导航控制器还是WelcomeViewController 展示你的视图控制器? 在 WelcomeViewController(嵌入在 NavigationViewController 中)中按下按钮时会执行 modal。 【参考方案1】:

如果是我,我会在 Modal VC 中写一个 delegate protocolhere 并让 WelcomeViewController 成为 delegate - 一旦被解雇,WelcomeViewController 可以接管并继续RoleViewController ?

【讨论】:

【参考方案2】:

我所做的是将演示者引用发送到演示的实例。

这可以通过在被呈现的类中设置呈现类引用的属性来实现。

例如,

@property (strong, nonatomic) PresentingClass *presenter;

.

然后,在呈现类实现中

presentedClass.presenter = self;
[self presentViewController:presentedClass animated:YES completion:nil];

最后,在呈现的实现中,只需调用

if(presenter)
  [presenter foo];

可以帮忙。告诉我。

【讨论】:

以上是关于参考从模态(objective-c)呈现视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

应用程序试图在 React Native Objective-C 扩展中的目标上呈现一个 nil 模态视图控制器

使用故事板从应用程序委托呈现模态视图控制器

如何从模态视图控制器调用呈现视图控制器的方法

从模态视图呈现视图控制器给出错误

从模态呈现的视图控制器内部呈现 UIPopoverController

从 UISplitView 呈现全屏模式视图?