在UIAlertView上方显示UIView

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

这个问题与你需要做的类似,所以我希望它能有所帮助。https://dev59.com/8GEh5IYBdhLWcg3wlEVq - BooRanger
一个规避此问题的方法可能是在应用进入后台时维护你的 UIAlertView 的引用,并将其隐藏起来。当应用再次进入前台时,由你决定如何处理alertView的引用。 - Vinod Vishwanath
好问题。但我认为UIAlertView应该在所有东西的顶部 - 这是它的职责 - 提醒。 - Unheilig
2个回答

5
你应该像这样
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];

无论何时你想要隐藏锁定屏幕窗口,只需通过setHidden:YES来隐藏它。

现在它对我也起作用了;问题在于 ARC 立即清理了mySpecialWindowForLockScreen,因此我必须为其创建一个属性。 - swalkner

2

UIWindowLevel有三种类型,级别越高的窗口将显示在其他窗口之上。

因此,我建议您使用一个UIWindow来创建锁屏页面,并将其窗口级别设置为大于UIWindowLevelAlert

基本上,它们的值如下:

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

所以这就是为什么警告视图会显示在其他窗口之上。你可以试一试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接