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的主要内容,如果未能解决你的问题,请参考以下文章