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

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

UINavigationViewController
 -> WelcomeViewController
 -> RoleViewController

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

现在我在 ModalViewController 我想关闭模式并从 Welcome to Role 执行原始 segue。我在 StackOverflow 上进行了一些搜索,并对如何做到这一点提出了不同的看法。这里列出了最合乎逻辑的方式: 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。

标签: ios objective-c uiviewcontroller uinavigationcontroller


【解决方案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];
    }
    

    可以帮忙。告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多