【发布时间】:2012-12-03 14:57:58
【问题描述】:
我有一个导航控制器,它是我的应用程序的根视图控制器。这是我的主屏幕。我有一个拆分视图控制器,其主视图列出位置,详细视图显示地图上的位置。我想将拆分视图控制器推送到导航控制器,但它抛出一个错误,说拆分视图控制器不能推送到导航控制器,它必须是应用程序的根视图控制器。 所以我很努力。
MyAppDelegate *myappdelegate= [[UIApplication sharedApplication] delegate];
UISplitViewController * vc= [[UISplitViewController alloc] init];
vs.viewControllers = [NSArray arraywithObjects......
....
myappdelegate.window.rootViewController= vc;
这行得通。它按预期显示没有动画的拆分视图控制器。当我关闭拆分视图控制器时,我会执行相同的步骤。我正在创建一个带有主屏幕笔尖的导航控制器,并再次将其设置为我的应用程序委托的 window.rootviewController。 它再次成功加载主屏幕。
但我怀疑这是实现这一目标的正确方法。有没有更符合条件的方法?
而且我无法释放拆分视图控制器的子控制器。我在子控制器的发布方法上做了一个断点。它没有被抓住。我假设当我将应用程序的根视图控制器设置为导航控制器时,旧的根视图控制器(拆分视图控制器)必须与其子级一起释放。 然后我在关闭拆分视图控制器时尝试了下面的代码。
UISplitViewController *oldviewcontroller= (UISplitViewController*) myappdelegate.window.rootViewController;
for (UIViewController *child in oldviewcontroller.viewControllers)
{
[child release];
}
//Setting the navigation controller as window.rootviewController again in here.
此代码引发错误,提示“[UIImageView __viewDidDisappear:]: unrecognized selector sent to instance 0x7d....”
我认为由于已经释放视图,因此 viewdidDisappear 事件上没有图像视图。
简而言之,我的问题是我是否使用正确的方法来实现这一目标?如果是这样,我怎样才能成功释放所有子视图控制器?
【问题讨论】:
-
你的imageview怎么会有viewDidDisappear?您是否错误地专门在 UIImageView 上调用它(viewDidDisappear)?如果你的窗口的 rootviewController 是一个普通的 uiviewcontroller 作为主视图控制器,并且你根据你的要求以模态方式显示你的 splitVC 和 navVC 怎么办?
-
苹果文档说 splitVC 不能以模态方式呈现。所以我认为这不是一个解决方案。谢谢你的评论。
标签: ios uinavigationcontroller uisplitviewcontroller ipad