一、 window add subview
自定义 alert 的时候,没有做统一规划,都是实现一个 view,然后添加到 window 上。例如:
UIView *alert = [[UIView alloc] initWithFrame:];
[window addSubView:alert];
复制代码
这样本来也没有什么问题,有一天需求来了要支持 Voice Over
,问题来了,直接盖上去的 view
不会自动聚焦,也就是手指左右滑动的时候,不能选中这个 view
。而且不能 alert
出来的时候,不能自动读出。
二、利用Window 的 makeKeyAndVisible
然后想起以前 UIAlertView 显示的时候是有一个单独 window 的,于是也仿照 这样,自己建一个 window,来显示 alert,
self.alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.alertWindow.rootViewController = [[UIViewController alloc] init];
id<UIApplicationDelegate> delegate = [UIApplication sharedApplication].delegate;
// Applications that does not load with UIMainStoryboardFile might not have a window property:
if ([delegate respondsToSelector:@selector(window)]) {
// we inherit the main window's tintColor
self.alertWindow.tintColor = delegate.window.tintColor;
}
self.alertWindow.hidden = YES;