窗口层次结构 ios
Posted
技术标签:
【中文标题】窗口层次结构 ios【英文标题】:Window hierarchy ios 【发布时间】:2016-08-26 08:57:54 【问题描述】:我有一个可能已经回答的问题,但我就是找不到。
我有一个调用一些 web 服务的视图,当结果返回时,我想打开另一个视图来显示结果。在调用 WS 之后,我立即关闭了该窗口。
现在我的问题是,当我尝试使用 presentViewController 打开它时
UIApplication.sharedApplication().keyWindow?.visibleViewController!.presentViewController or
UIApplication.sharedApplication().keyWindow?.visibleViewController!.childViewControllers[0].presentViewController
如果我访问 rootViewControler 也是如此。
我得到的错误是视图不再在层次结构中,因为它已经调用了 viewWillDisappear。
那么有什么方法可以显示所有视图的视图,不管当前的顶视图是什么?
编辑:
解决方案真的很丑陋和愚蠢。我有一个静态变量,每次调用 viewDidApear 到该视图时都会更改该变量。这样我就有了显示的最后一个视图。我知道这不是好方法,甚至可能不是安全的方法,但我没有任何其他想法。
【问题讨论】:
请显示更多代码。 【参考方案1】:是的,有一种方法可以将 ViewController 显示在另一个之上,但为此您根本不应该触摸您的窗口。 在您的呼叫完成呼叫后立即在您的视图控制器类中
let viewController = ViewController() //change this to your view controller class that you want to present
self.presentViewController(viewController, animated: true, completion: nil)
【讨论】:
在正常情况下这是可行的,问题是在我称之为这不是 UIViewController 的窗口上,所以我必须获得应用程序的顶视图。【参考方案2】:使用以下代码调用 Web 服务并在主线程中导航您的视图控制器。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
// do some background task
dispatch_async(dispatch_get_main_queue(), ^
// update UI here
// navigate your view controllers
let vc: UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("viewContIdentifire"))!
self.presentViewController(vc, animated: true, completion: nil)
// **OR**
self.navigationController?.pushViewController(vc, animated: true)
);
);
使用更方便的方式导航回 VC
// using this navigate your app to root view of ui stack
self.navigationController?.popToRootViewControllerAnimated(true)
// using this line of code navigate to any view
self.navigationController?.popToViewController(viewContName, animated: true)
// this navigate back to last view
self.navigationController?.popViewControllerAnimated(true)
【讨论】:
问题是我使用不同的navigationControllers,有些被关闭了,所以我仍然必须以某种方式找到最后打开的视图。 使用self.navigationController?.pushViewController(vc, animated: true)
会带回选项。
只需使用我发布的上述代码申请,然后您就会了解如何导航。
正如我在评论中写下的答案一样,我没有在 UIViewController 类中进行此调用,所以我不能调用 self,这是我的问题。而且我不能在开始调用时设置父类,因为在调用父类关闭并且应用程序等待 WS 调用结果之后。以上是关于窗口层次结构 ios的主要内容,如果未能解决你的问题,请参考以下文章
iOS viewWillAppear 错误:“视图不在窗口层次结构中”