额,来记录一下学习历程,以前不记录,好多解决过的问题又出来烦我,不好不好
因为项目开发有多套测试环境,经常要切换不同的环境联调代码,所以测试老是来重新打包,故而就在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];
}
}
}
}
网友评论