ViewControllerの仕様にあわせてpresentViewController出来そうなViewControllerを探しまくってそこにpresentViewControllerする。
keyWindowのrootViewControllerはpresentされていることもあるしこうしないと常にpresentViewControllerすることができない。
let rootVC = topViewController(UIApplication.sharedApplication().keyWindow?.rootViewController)
rootVC?.presentViewController(vc, animated: true, completion: nil)
private func topViewController(rootVC:UIViewController?)->UIViewController?{
if let vc = rootVC as? UITabBarController{
return topViewController(vc.selectedViewController)
}else if let vc = rootVC as? UINavigationController {
return topViewController(vc.visibleViewController)
}else if let vc = rootVC?.presentedViewController {
return topViewController(vc)
}else {
return rootVC
}
}
デバッグ画面出したりするときに使うと便利