12207480 / TYAlertController

Powerful, Easy to use alert view or popup view on controller and window, support blur effects,custom view and animation,for objective-c,support iphone, ipad
MIT License
1.31k stars 239 forks source link

当UIWindow不在第一个位置的时候,弹窗弹不出来 #31

Open jiaxiaoru opened 5 years ago

jiaxiaoru commented 5 years ago

这个现象出现在我们的App第一次安装的时候,[UIApplication sharedApplication].windows 这个获取到的windows数组如下: <__NSArrayM 0x6000022bf9c0>( <UITextEffectsWindow: 0x7fe724227800; frame = (0 0; 414 896); opaque = NO; autoresize = W+H; layer = <UIWindowLayer: 0x600002c38ac0>>, <UIWindow: 0x7fe723f453b0; frame = (0 0; 414 896); autoresize = W+H; tintColor = UIExtendedSRGBColorSpace 0.117647 0.8 0.431373 1; gestureRecognizers = <NSArray: 0x600002259a40>; layer = <UIWindowLayer: 0x600002cbf3e0>>, <UITextEffectsWindow: 0x7fe725029a00; frame = (0 0; 414 896); layer = <UIWindowLayer: 0x600002c3e160>>, <UIRemoteKeyboardWindow: 0x7fe725107400; frame = (0 0; 414 896); opaque = NO; autoresize = W+H; layer = <UIWindowLayer: 0x600002c3e0e0>> ) 如果取第一个的话,弹窗就弹不出来,关闭App,重新打开App又好了,所以觉得

define kCurrentWindow [[UIApplication sharedApplication].windows firstObject]

这行代码有问题,应该要判断下取到的是否是UIWindow,windowlevel是否为normal,我们这边能改,但是代码不好管理,希望你们能在下个版本解决下这个问题,辛苦了。

12207480 commented 5 years ago

用 keywindow吧

jiaxiaoru commented 5 years ago

用 keywindow吧 大部分情况下用keywindow是可以的,但是如果取keywindow前系统有弹过窗(UIAlertView)并且没消失,此时取到的keywindow会是UIAlertControllerShimPresenterWindow,而不是UIWindow,所以是建议这样获取[[[UIApplication sharedApplication] delegate] window]

12207480 commented 5 years ago

好提议

SylarCao commented 5 years ago

用 keywindow吧 大部分情况下用keywindow是可以的,但是如果取keywindow前系统有弹过窗(UIAlertView)并且没消失,此时取到的keywindow会是UIAlertControllerShimPresenterWindow,而不是UIWindow,所以是建议这样获取[[[UIApplication sharedApplication] delegate] window]

对呀 为什么不用 [[UIApplication sharedApplication] keyWindow]