我创建了一个iOS 7密码副本,我有一个似乎无法解决的问题。我需要锁定屏幕视图在所有其他东西之上,所以这个应用程序包含在iOS的多任务视图中,所以我直接将它添加到keyWindow中。目前一切都很好。
当我不得不显示锁定屏幕时,如果有一个alertView或actionSheet (为了保持简单起见,在本文中只会提到alertView),就会出现问题。有人多次回答说,在alertView 7中没有对iOS s的引用,这是正确的,显示它们的窗口是_UIModalItemHostingWindow,它有2个UIView,实际上没有引用alertView。
这个_UIModalItemHostingWindow 也变成了新的,所以它位于所有其他东西之上,但是在[UIApplication sharedApplication].windows中找不到它,意思是如果我将锁屏幕添加到以前的keyWindow (默认的keyWindow,如果你愿意的话),它将位于alertView及其暗淡的背景之下,因此用户不能在取消alertView之前与锁屏幕进行交互。另一个选项将在下面更详细地介绍。
锁屏幕的工作方式如下:在applicationDidEnterBackground上,它检查密码是否启用;如果启用,密码持续时间为0(用户选择立即锁定应用程序),它现在添加锁定屏幕,因此它在多任务处理视图中覆盖应用程序。现在,我前面提到的选项是将alertView添加到这个_UIModalItemHostingWindow窗口,但是当返回到应用程序时,锁定屏幕视图将显示为1+第二次延迟(即使我在进入后台之前添加了它!)在多任务视图中,这个应用程序也没有覆盖任何内容。(目前,它也显示在错误的位置,如果您继续下载它,这是固定的,但我还没有按提交)。
我试图隐藏和removeFromSuperview这个_UIModalItemHostingWindow,但当回到应用程序时,alertView动画仍然运行,就像它刚刚被触发一样。我怀疑上面提到的延迟也是由于苹果在回到前台时如何处理alertViews造成的。
我还尝试创建一个新窗口并使其成为新的keyWindow,但同样的情况也发生了。
这里有一个关于这个的小讨论,涵盖了我尝试过的所有东西,也许我在这篇文章中遗漏了一些东西。https://github.com/rolandleth/LTHPasscodeViewController/issues/16
有什么想法吗?除了在我的应用程序中创建对每个alertView和actionSheet的手动引用之外,因为我试图为密码库而不是我自己的应用程序找到一个修复;我可以找到解决这个问题的脏方法,没有问题:)
Update:如果使用的是_UIAlertOverlayWindow而不是alertView,则窗口是alertView,但据我所知,它的行为是相同的。
发布于 2013-11-07 12:29:42
最简单的解决方案是有一个锁定窗口,而不是一个锁定屏幕视图。
创建一个新的UIWindow,将其帧设置为UIScreen界限,在那里放置一个简单的rootViewController,它应该处理旋转,显示“锁定屏幕”视图,并将windowLevel设置为UIWindowLevelAlert + 1。
然后将窗口的hidden设置为YES。当您想显示锁定屏幕时,只需将hidden设置为NO即可。
我猜,向keyWindow添加视图在显示弹出/操作表和显示键盘时也不起作用(键盘在键窗口的顶部有自己的窗口)。
https://stackoverflow.com/questions/19816142
复制相似问题