Closed CaiWanFeng closed 4 years ago
你好,我发现源码中获取topViewController是基于keyWindow的:
topViewController
keyWindow
- (UIViewController *)topViewController { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; while (topController.presentedViewController) { topController = topController.presentedViewController; } return topController; }
但是keyWindow是变化的,比如说UIAlertView所在的window就是一个临时的keyWindow。
UIAlertView
考虑如下场景,有一个UIAlertView,点击UIAlertView的按钮跳转到一个新的controller:
controller
func alertView(_ alertView: UIAlertView, clickedButtonAt buttonIndex: Int) { let vc = CQBaseViewController() vc.title = "present" vc.view.backgroundColor = .orange CTMediator.sharedInstance().present(vc, animated: true) { } }
虽然跳转过去了,但是新的controller随着UIAlertView的消失而消失,因为UIAlertView所在的window就是keyWindow,猜想弹窗消失的时候它的window也释放。
所以是不是delegate.window比keyWindow更适合?
delegate.window
虽然UIAlertView已经废弃,但是不排除有三方弹窗使用跟他一样的思路。
你好,这个问题我之前确实也没有考虑到。
不过UIAlertView我并不想在针对它去做支持了,如果你实在需要,可以在你自己的项目中给CTMediator做一个专门的category来解决这个问题。
还是非常感谢你提供的建议,谢谢🙏
你好,我发现源码中获取
topViewController
是基于keyWindow
的:但是
keyWindow
是变化的,比如说UIAlertView
所在的window就是一个临时的keyWindow
。考虑如下场景,有一个
UIAlertView
,点击UIAlertView
的按钮跳转到一个新的controller
:虽然跳转过去了,但是新的
controller
随着UIAlertView
的消失而消失,因为UIAlertView
所在的window就是keyWindow
,猜想弹窗消失的时候它的window也释放。所以是不是
delegate.window
比keyWindow
更适合?虽然
UIAlertView
已经废弃,但是不排除有三方弹窗使用跟他一样的思路。