iOS开发获取KeyWindow[OC+Swift]

1,547 阅读1分钟

OC版本 Swift版本 最新获取Keywidow方式。原iOS13方法被放弃,新版本的keywidow方式有所改变。

OC版本


    if([[[UIApplication sharedApplication] delegate] window]){

        return [[[UIApplication sharedApplication] delegate] window];

    }else {

        if (@available(iOS 13.0,*)) {

            NSArray *arr = [[[UIApplication sharedApplication] connectedScenes] allObjects];

            UIWindowScene *windowScene = (UIWindowScene *)arr[0];

            UIWindow *_window = windowScene.windows.firstObject;

            if (_window) {

                return _window;

            }

        }

        //iOS15以后windows也DEPRECATED了

        return [UIApplication sharedApplication].windows.lastObject;

    }

}

Swift版本

public var keyWindow: UIWindow? {

    if #available(iOS 14.0, *) {

        if let window = UIApplication.shared.connectedScenes.map({$0 as? UIWindowScene}).compactMap({$0}).first?.windows.first {

            return window

        }else if let window = UIApplication.shared.delegate?.window {

            return window

        }else{

            return nil

        }

    } else if #available(iOS 13.0, *) {

        if let window = UIApplication.shared.connectedScenes

            .filter({$0.activationState == .foregroundActive})

            .map({$0 as? UIWindowScene})

            .compactMap({$0})

            .first?.windows

            .filter({$0.isKeyWindow}).first{

            return window

        } else if let window = UIApplication.shared.delegate?.window {

            return window

            

        } else {

            return nil

        }

    } else {

        if let window = UIApplication.shared.delegate?.window {

            return window

        }else{

            return nil

        }

    }

}