iOS 获取最上层 Window 的正确方法
2018-08-16 本文已影响1人
ZHANGMIAO_
有时候,我们需要将View添加到最上层的Window上,比如:弹出框、Loading等,通常是采用[[UIApplication sharedApplication].windows lastObject] 或[UIApplication sharedApplication].keyWindow来获取。
但其实通过[[UIApplication sharedApplication].windows lastObject] 来获取并不严谨,最容易造成的现象是:View添加完后,没有显示出来。这时候打印它的类为UIRemoteKeyboardWindow,而不是UIWindow类,所以再使用中需要开发者注意如何正确的获取最上层的window.
- (UIWindow *)lastWindow
{
NSArray *windows = [[[UIApplication sharedApplication].windows reverseObjectEnumerator] allObjects];
for(UIWindow *window in windows) {
if ([NSStringFromClass([window class]) isEqualToString:@"UIWindow"] &&
CGRectEqualToRect(window.bounds, [UIScreen mainScreen].bounds))
return window;
}
return [UIApplication sharedApplication].keyWindow;
}