【问题标题】: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 是的,这是一个选项,这将非常非常不方便,因为需要进行大量初始化

标签: ios uiviewcontroller


【解决方案1】:

您不能呈现已经呈现或位于导航堆栈中的视图控制器。什么是主视图控制器?你实例化了吗?已经添加到屏幕上了吗?

如果两者都是,您要么需要回到它(关闭它),要么先将它从它的父级中删除,然后再展示它。

【讨论】:

  • 两者的答案都是肯定的。我已经更新了我的问题,以显示我是如何称呼孩子的。解决我的问题的最简单方法是什么?
  • 你在用 mainViewController 做什么?
  • 好的,我最终做的是保存子视图的实例,并将其属性设置为(nonatomic, retain),然后将其关闭以返回父视图。
【解决方案2】:

在您的子视图中,您应该可以访问您的应用程序委托及其 mainViewController 属性,如下所示:

    MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];

【讨论】:

  • 是的,我试过了,但在presentViewController 行出现错误。
  • 你能得到堆栈跟踪吗?让我们看看它不喜欢什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多