【发布时间】:2015-08-14 18:09:59
【问题描述】:
我想实现一个单独的 ErrorHandler 类,它在某些事件上显示错误消息。应该从不同的其他类调用此类的行为。
当发生错误时,它将有一个UIAlertView 作为输出。
此 AlertView 的显示应始终位于顶部。因此,无论从哪里抛出错误,最顶层的 viewController 都应该显示 AlertMessage(例如,当异步后台进程失败时,我想要一条错误消息,无论前台显示什么 View)。
我找到了几个似乎可以解决我的问题的要点(请参阅下面的代码)。
但是调用UIApplication.sharedApplication().keyWindow?.visibleViewController() 确实返回一个零值。
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;
}
}
}
}
【问题讨论】:
-
在您可能的情况下,请您可以在 githHub 或其他地方分享您的 ErrorHandler 类吗?
标签: swift uialertview viewcontroller uiwindow