参考从模态(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 protocol
here 并让 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 模态视图控制器