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
}
}
}