参考从模态呈现视图控制器(目标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的对象专门指定,但似乎没有任何效果。
请帮帮我。 :)
如果是我,我会写一个在这里Modal VC
delegate protocol
,你提出并WelcomeViewController
的delegate
- 一旦它被驳回,则可以WelcomeViewController
接管和原因请看RoleViewController
?
我所做的是将发言人参考发送给所呈现的实例。
这可以通过设置在呈现的类中呈现类引用的属性来实现。
例如,
@property (strong, nonatomic) PresentingClass *presenter;
。
然后,在呈现类实现
presentedClass.presenter = self;
[self presentViewController:presentedClass animated:YES completion:nil];
最后,在提出实现,只需拨打
if(presenter){
[presenter foo];
}
可能会有帮助。让我知道。
你是否从导航控制器或'WelcomeViewController'展示了你的视图控制器? – ozgur
按下WelcomeViewController中的按钮(嵌入在NavigationViewController中)时,将执行该模式。 –