[UIAlertView 显示] 是如何工作的?
Posted
技术标签:
【中文标题】[UIAlertView 显示] 是如何工作的?【英文标题】:How does [UIAlertView show] work? 【发布时间】:2010-09-16 09:27:54 【问题描述】:我想做一些类似于 UIAlertView 的事情,即 - 不参考任何 UIView 或 UIViewController,使用 presentModalViewController 在所有窗口的顶部呈现一个 UIViewController。
查看文档我找不到可行的方法!
在 OS4 中,有这样的:
UIWindow *window = [UIApplication sharedApplication].keyWindow
UIViewController *rootViewController = window.rootViewController
...但这在 OS3 中是不可能的。
有人知道如何在 OS3 中实现同样的效果吗?
谢谢!
好的 - 所以我通过无数个对 ViewController 本身的委托回调解决了这个问题!虽然这是实现此目的的正确方法,但它确实有点奇怪,因为在执行的任何阶段都无法获得顶部视图控制器的句柄以获取警报(等)。
如果有人知道如何实现这一点,我仍然非常感兴趣!
【问题讨论】:
【参考方案1】:【讨论】:
啊——大开眼界!这次真是万分感谢!尼克 什么/谁保留了 UIWindow 实例?当我创建 UIWindow 的实例但不将其保留为实例变量/属性时,它永远不会出现,并且似乎也从[[UIApplication sharedApplication] windows]
数组中删除。我错过了什么吗?
好的,所以为了尝试创建一个类似于 UIAlertView 的覆盖,我通过创建一个保留循环使我的 UIWindow 子类有效地保留了自己。我将self
分配给一个强属性,然后在我的dismiss 方法中将该属性设置为nil。似乎工作,这是一个坏主意吗?我假设 UIAlertView 做了类似的事情。
@ChrisWagner 坏主意。在内部,有一个_UIAlertManager
处理这些问题。当您调用show
和hide
时,它负责创建窗口、保留它们并负责释放它们。
谁保留了_UIAlertManager
?是单例吗?以上是关于[UIAlertView 显示] 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章