iOS13后获取Window
在新创建的项⽬中,AppDelegate默认没有window属性。但为了兼容iOS 12及以下版本,⼀般项⽬中还是得⾃⼰加上
strong, nonatomic
nonatomic) UIWindow *window;
@property (strong
也就是说,有两种情况,可以直接使⽤旧⽅法 [[[UIApplication sharedApplication] delegate] window] 来获取
1. 旧项⽬中,如果没有使⽤SceneDelegate
2. iOS 12及以下版本
但iOS13后,苹果为了兼容分屏功能,加⼊了SceneDelegate。具体在这⾥就不展开,回归主题~~
在SDK开发中, SDK⼯程没有AppDelegate和SceneDelegate。我们也没有办法保证使⽤者的App是怎样
操作的,所以贴上⾃⼰的解决⽅法。
代码
```
+(UIWindow*)getCurrentWindow
{
if([[[UIApplication sharedApplication] delegate] window]) {
国庆高速公路免费通行时间return[[[UIApplication sharedApplication] delegate] window];
}else{
if(@available(iOS13.0, *)) {
NSArray *array =[[[UIApplication sharedApplication] connectedScenes] allObjects];
UIWindowScene* windowScene = (UIWindowScene*)array[0];
//如果是普通App开发,可以使⽤
/
/ SceneDelegate * delegate = (SceneDelegate *)windowScene.delegate;
// UIWindow * mainWindow = delegate.window;
//由于在sdk开发中,引⼊不了SceneDelegate的头⽂件,所以需要⽤kvc获取宿主app的window.
UIWindow* mainWindow = [windowScenevalueForKeyPath:@"delegate.window"];
if(mainWindow) {
returnmainWindow;
}else{
return[UIApplication sharedApplication].windows.lastObject;
}
}else{
// Fallback on earlier versions
创建学习型党组织
return[UIApplication sharedApplication].keyWindow;
}
}
}
ie无法打开```
⼩弟不才,若有错误之处,欢迎留⾔讨论(^_^)
2020.12.03 更新:
在项⽬迭代中发现⼀个⼩问题,当windows上有⼦视图,例如:播放器的全屏。
调⽤ [UIApplication sharedApplication].windows.lastObject; 拿到的是最顶层视图,如果需要拿最底层的window视图,需要改成firstObject
2021..4.15 更新:
补充上swift版本 , 旧⽂章好像没有办法变成markdown模式。。。将就看⼀下吧
```
/// 获取当前window
/// - Returns
Returns: 窗⼝
@objc public static func getCurrentWindow() -> UIWindow
{扫黑风暴结局
ifletwindow:UIWindow= (UIApplication.shared.delegate?.window)! {
买什么车好// print(window);
returnwindow
}else{
if#available(iOS13.0, *) {
let array:Set = tedScenes
letwindowScene:UIWindowScene= array.firstas!UIWindowScene
//如果是普通App开发,可以使⽤
// SceneDelegate * delegate = (SceneDelegate *)windowScene.delegate;
// UIWindow * mainWindow = delegate.window;
ifletmainWindow:UIWindow= windowScene.value(forKeyPath:"delegate.window")as?UIWindow{ returnmainWindow
}else{
return UIApplication.shared.windows.first!
}
}else{
return UIApplication.shared.keyWindow!
}
}
}
东北大拉皮的做法```
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论