我希望实现一个单独的ErrorHandler类,它能够在某些事件发生时显示错误信息。这个类的行为应该从其他不同的类中调用。
当发生错误时,将有一个UIAlertView作为输出。AlertView的显示应该始终在最上层。所以无论Error从哪里抛出,最上面的viewController都应该显示AlertMessage(例如,当异步后台进程失败时,我想要一个错误消息,无论前景中显示了什么视图)。
我已经找到了几个看起来可以解决我的问题的gist(见下面的代码)。但调用UIApplication.sharedApplication().keyWindow?.visibleViewController()返回一个nil值。
来自gist的扩展
我已经找到了几个看起来可以解决我的问题的gist(见下面的代码)。但调用UIApplication.sharedApplication().keyWindow?.visibleViewController()返回一个nil值。
来自gist的扩展
extension UIWindow {
func visibleViewController() -> UIViewController? {
if let rootViewController: UIViewController = self.rootViewController {
return UIWindow.getVisibleViewControllerFrom(rootViewController)
}
return nil
}
class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController {
if vc.isKindOfClass(UINavigationController.self) {
let navigationController = vc as! UINavigationController
return UIWindow.getVisibleViewControllerFrom( navigationController.visibleViewController)
} else if vc.isKindOfClass(UITabBarController.self) {
let tabBarController = vc as! UITabBarController
return UIWindow.getVisibleViewControllerFrom(tabBarController.selectedViewController!)
} else {
if let presentedViewController = vc.presentedViewController {
return UIWindow.getVisibleViewControllerFrom(presentedViewController.presentedViewController!)
} else {
return vc;
}
}
}
}