参考从模态呈现视图控制器(目标c)

参考从模态呈现视图控制器(目标c)

问题描述:

我有一个导航堆栈包括:参考从模态呈现视图控制器(目标c)

UINavigationViewController 
-> WelcomeViewController 
-> RoleViewController 

我想在欢迎和角色之间添加一个模态的ViewController。我通过故事板添加一个ModalViewController,并从WelcomeViewController中的一个按钮中为ModalViewController分配一个segue(Modally)。这一切都很好,模态显示很好。

现在我在ModalViewController中我想解除模态并从欢迎使用角色执行原始的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的对象专门指定,但似乎没有任何效果。

请帮帮我。 :)

+0

你是否从导航控制器或'WelcomeViewController'展示了你的视图控制器? – ozgur

+0

按下WelcomeViewController中的按钮(嵌入在NavigationViewController中)时,将执行该模式。 –

如果是我,我会写一个在这里Modal VCdelegate protocol,你提出并WelcomeViewControllerdelegate - 一旦它被驳回,则可以WelcomeViewController接管和原因请看RoleViewController

我所做的是将发言人参考发送给所呈现的实例。

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

例如,

@property (strong, nonatomic) PresentingClass *presenter; 

然后,在呈现类实现

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

最后,在提出实现,只需拨打

if(presenter){ 
    [presenter foo]; 
} 

可能会有帮助。让我知道。