从子视图控制器呈现主视图控制器
Posted
技术标签:
【中文标题】从子视图控制器呈现主视图控制器【英文标题】:Presenting Main View Controller from a Child View Controller 【发布时间】:2012-09-29 22:31:14 【问题描述】:我有一个主视图控制器并正在呈现一个子视图。对于孩子内部的其中一项设置,我需要再次调用主视图控制器。它只会让事情变得更容易。
以下导致层次结构问题:
#define appDelegate (MyAppDelegate *)[[UIApplication sharedApplication] delegate]
[self presentViewController:[appDelegate mainViewController] animated:YES completion:^];
有没有什么方法可以方便的调用mainViewController而不丢失子view的状态?
编辑
这是我展示子视图的方式。
ChildViewController *childViewController = [[ChildViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:childViewController];
[childViewController release];
[self presentModalViewController:navigationController animated:NO];
[navigationController release];
【问题讨论】:
就不能新建一个parentView并推送给child吗? @KassemBagher 是的,这是一个选项,这将非常非常不方便,因为需要进行大量初始化 【参考方案1】:您不能呈现已经呈现或位于导航堆栈中的视图控制器。什么是主视图控制器?你实例化了吗?已经添加到屏幕上了吗?
如果两者都是,您要么需要回到它(关闭它),要么先将它从它的父级中删除,然后再展示它。
【讨论】:
两者的答案都是肯定的。我已经更新了我的问题,以显示我是如何称呼孩子的。解决我的问题的最简单方法是什么? 你在用 mainViewController 做什么? 好的,我最终做的是保存子视图的实例,并将其属性设置为(nonatomic, retain)
,然后将其关闭以返回父视图。【参考方案2】:
在您的子视图中,您应该可以访问您的应用程序委托及其 mainViewController 属性,如下所示:
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];
【讨论】:
是的,我试过了,但在presentViewController
行出现错误。
你能得到堆栈跟踪吗?让我们看看它不喜欢什么。以上是关于从子视图控制器呈现主视图控制器的主要内容,如果未能解决你的问题,请参考以下文章