iOS开发技术分享

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;
}
上一篇 下一篇

猜你喜欢

热点阅读