UIAlertView-like UIWindow

Posted

技术标签:

【中文标题】UIAlertView-like UIWindow【英文标题】: 【发布时间】:2015-01-12 21:55:11 【问题描述】:

我想制作某种自定义警报视图 - 功能基本相同,但外观不同。据我所知, UIAlertView 显示在一个单独的窗口中。我可以创建一个窗口,将视图放入其中并显示它,但如果没有对 UIWindow 对象的强引用,它会在函数返回后立即消失。另一方面,可能没有对 UIAlertView 的强引用,但它显示后并没有消失。如何为我的警报窗口实现相同的行为?

// create a new window
UIWindow *alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
alertWindow.windowLevel = UIWindowLevelAlert;

UIToolbar *background = [[UIToolbar alloc] initWithFrame:alertWindow.frame];
background.barStyle = UIBarStyleBlack;
background.translucent = YES;
[alertWindow addSubview:background];

[alertWindow addSubview:contentView];    
[alertWindow makeKeyAndVisible];

【问题讨论】:

【参考方案1】:

你真的能看到这个警报窗口吗?因为我无法在屏幕上显示它,除非我在当前 ViewController 上也调用 [self.view addSubview:alertWindow];

第二件事: 如果您需要与UIAlertView 相同的功能,只需将其子类化即可。

第三件事: 如果您需要更多可自定义的UIAlertView,我会使用自定义UIView 并对其进行自定义。您可以在任何 UIViewController 上使用委托或如果您愿意,也可以使用 NSNotificationCenter 显示此警报。

【讨论】:

【参考方案2】:

我可以创建一个窗口,将视图放入其中并显示它,但如果没有对 UIWindow 对象的强引用,它会在函数返回后立即消失。

你或多或少地回答了你自己的问题。确保有对窗口的强引用。

UIAlertView 的内部结构相当复杂,但是有一个单例可以同时保存警报和显示它的窗口。创建的每个警报都会调用该单例,因此您可以执行类似的操作也是。

【讨论】:

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

UIWindow 详解及使用场景

iOS小技能:特殊的UIView(UIWindow)

iOS:为啥 UIWindow 不显示?

86UIWindow简单介绍

在主窗口上创建一个新的 UIWindow

UIWindow statusBar消失