UIAlertView 上面的 UIView

Posted

技术标签:

【中文标题】UIAlertView 上面的 UIView【英文标题】:UIView above UIAlertView 【发布时间】:2014-06-17 11:31:18 【问题描述】:

在我的应用中,使用了锁定屏幕。有时会显示UIAlertView,现在当用户将应用程序发送到后台并再次将其置于前面时,UIAlertview 会显示在锁定屏幕上方。是否有可能在所有内容之上添加UIViewController 的视图,即在UIAlertView 之上?

【问题讨论】:

对你需要做的事情有点微笑,所以我希望它有所帮助。 ***.com/questions/22241412/… 回避问题的一种方法可能是维护您的UIAlertView 的引用,并在应用程序进入后台时将其隐藏。当应用再次进入前台时,由您决定如何处理 alertView 引用。 好问题。但我认为UIAlertView 应该是最重要的——这是它的职责——提醒。 【参考方案1】:

你应该有这样的

UIWindow *mySpecialWindowForLockScreen = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

//"Hey ios Please put this window above all alert view"
mySpecialWindowForLockScreen.windowLevel = UIWindowLevelAlert+100;

UIViewController *lockScreenViewController = [[UIViewController alloc]init];//Lock Screen

lockScreenViewController.view.frame = mySpecialWindowForLockScreen.bounds;

mySpecialWindowForLockScreen.rootViewController = lockScreenViewController;


// In lockScreenViewController view you can add lock screen images and other UI stuff
mySpecialWindowForLockScreen.rootViewController.view.backgroundColor = [UIColor greenColor];

[mySpecialWindowForLockScreen makeKeyAndVisible];

当您想要隐藏 LockScreen 窗口时,只需通过 setHidden:YES 将其隐藏。

【讨论】:

现在它也适用于我;问题是 ARC 立即清理了mySpecialWindowForLockScreen,因此我必须为它创建一个属性。【参考方案2】:

UIWindowLevel 共有三种,最大的会显示在另一个窗口的上方。

所以我建议你使用 UIWindow 来创建你的锁屏,让它的窗口级别大于UIWindowLevelAlert

基本上,它们的值是:

 UIWindowLevelNormal = 0.000000;
 UIWindowLevel UIWindowLevelAlert = 2000.000000;
 UIWindowLevel UIWindowLevelStatusBar = 1000.000000;

这就是为什么警报视图会显示在另一个窗口上方的原因。试试看吧。

【讨论】:

以上是关于UIAlertView 上面的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

验证 UITextField 并在错误时显示 UIAlertView

iOS6 UIAlertView.title 坏了?

3 次启动 App 后显示 UIAlertview

如何在 UIAlertView 的 UITextField 上设置自动大写?

自定义 UIAlertView,委托上的消息更改

在 UIAlertView 上显示 UIActionSheet