UIWindow的获取
注意:还是直接用下面这个比较靠谱。尤其是iOS11之后。
[UIApplication sharedApplication].keyWindow;
1、下面这种是比较严谨的方式
- (UIWindow *)lastWindow { NSArray *windows = [UIApplication sharedApplication].windows; for(UIWindow *window in [windows reverseObjectEnumerator]) { if ([window isKindOfClass:[UIWindow class]] && CGRectEqualToRect(window.bounds, [UIScreen mainScreen].bounds)) return window; } return [UIApplication sharedApplication].keyWindow; }
2、不要简单的使用使用
[[UIApplication sharedApplication].windows lastObject];
3、MBProgressHUD+MJ.h中使用的就是第二种方式,在iOS11系统中的下列场景中出现问题:
(1)vcA在navigationcontroller中。
(2)vcA中能够正常使用
[MBProgressHUD showMessage:JSONDict[@"Message”]];
(3)vcA push vcB。
(4)vcB pop vcA。
(5)vcA中不能够正常使用
[MBProgressHUD showMessage:JSONDict[@"Message”]];