iOS多window开发

额,来记录一下学习历程,以前不记录,好多解决过的问题又出来烦我,不好不好

因为项目开发有多套测试环境,经常要切换不同的环境联调代码,所以测试老是来重新打包,故而就在github上找了一个悬浮窗 测试就可以自己切换环境了

然后就发现一个问题 键盘和自定义的弹框有时弹不出来

发现是UIAlertView和UIActionSheet在show的时候系统新添了一个window(_UIAlertControllerShimPresenterWindow)并且windowLevel是UIWindowLevelAlert(2000)

当弹框消失时会自动的将keywindow赋值到windowLevel值最高的window上

UIAlertController则不会新建个window

我的自定义弹框都是add在window上的 所以全部加在了悬浮窗上 造成重影的现象

解决办法

本想用KVO监听keywindow的值变化,奈何keywindow没有setter方法,有时系统的属性,监听不到
重写setter方法监听只适用非系统的属性,所以放弃

幸好系统定义了UIWindowDidBecomeVisibleNotification和UIWindowDidBecomeHiddenNotification通知,监听这两个通知动态修改keywindow就行

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeKeyWindow:) name:UIWindowDidBecomeKeyNotification object:nil];


-(void)changeKeyWindow:(NSNotification *)notifcation{
NSLog(@"%@--%@",[UIApplication sharedApplication].keyWindow,[self class]);
if ([[UIApplication sharedApplication].keyWindow isMemberOfClass:[self class]]) {
    
    for (UIWindow * window in [UIApplication sharedApplication].windows) {
        if (UIWindowLevelNormal == window.windowLevel){
            NSLog(@"%f--%f",UIWindowLevelNormal,window.windowLevel);
            
            
        }
        if([window isMemberOfClass:[UIWindow class]]){
            [window makeKeyAndVisible];
            //            [window addSubview:self];
        }
        
    }
    
}

}

你可能感兴趣的:(iOS多window开发)