私はtop most ViewControllerを見つけるために次の拡張を使用しています。 アラートが表示された場合、上のコードはUIAlertController
です。 トップビューコントローラを取得するにはUIAlertController
?UIAlertControllerの下で最もViewController
答えて
次のviewControllerがUIAlertController
であるかどうかを確認し、そうであればその親を返します。このようなもの:
if let presented = base as? UIAlertController {
return base.presentingViewController
}
返却前に使用した内線番号にこれを追加します。
はあなたが
extension UIApplication {
class func topViewController(base: UIViewController? = (UIApplication.sharedApplication().delegate as! AppDelegate).window?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let alert = base as? UIAlertController {
if let presenting = alert.presentingViewController {
return topViewController(base: presenting)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
return base
}
}
はXCodeの上でテストされていない、あなたのコードでこれらの変更を使用してpresentingViewController
プロパティを使用してUIAlertController
の親コントローラを得ることができます
extension UIApplication {
class func topViewController(base: UIViewController? = (UIApplication.sharedApplication().delegate as! AppDelegate).window?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
if let alert = base as? UIAlertController {
return alert.presentingViewController
}
return base
}
}
を更新しました。
それは無限再帰 – Luda
を作る私達はちょうどUIAlertController祖先 – Luda
は申し訳ありませんが、それは' UIAlertController'だっれる人を見つける必要があります。 – atulkhatri
私はUIAlertControllerの下で一番上のビューコントローラを取得するためにこの拡張を使用しました。基本的には、UIAlertControllerを見つけたときにトップビューコントローラの検索を停止することです。
extension UIApplication {
var topViewController: UIViewController? {
var viewController = keyWindow?.rootViewController
guard viewController != nil else { return nil }
var presentedViewController = viewController?.presentedViewController
while presentedViewController != nil, !(presentedViewController is UIAlertController) {
switch presentedViewController {
case let navagationController as UINavigationController:
viewController = navagationController.viewControllers.last
case let tabBarController as UITabBarController:
viewController = tabBarController.selectedViewController
default:
viewController = viewController?.presentedViewController
}
presentedViewController = viewController?.presentedViewController
}
return viewController
}
}
- 1. UIAlertControllerのようなアプリケーションのどこにでもポップアップを表示
- 2. UIAlertControllerのカウントダウン
- 3. UIAlertControllerが最新のXcodeでエラーを表示しています
- 4. 2番目のViewControllerから最初のViewControllerに戻る
- 5. ユニバーサルアプリケーションのUIAlertControllerとUIPopoverController?
- 6. 迅速ダイナミックUIAlertController
- 7. UIAlertControllerテキストフィールドの幅が通常よりも小さく
- 8. ViewControllerを別のものに表示
- 9. UITextFieldのUIAlertController内の距離
- 10. 現在アクティブなUIViewControllerのUIAlertController
- 11. UIAlertControllerのテキストフィールドでテキストを選択
- 12. viewController内のtableviewからviewControllerを押しても動作しません。
- 13. NSNotification:ビューがウィンドウ階層にないViewControllerにUIAlertControllerを表示しようとしました
- 14. モーダルのViewControllerは私がモーダルビューとして提示してるのViewControllerのサブクラスを持って下
- 15. 異なるUIPickerViewデリゲート/データソースUIAlertController
- 16. UIAlertControllerでtextFieldを追加するには?
- 17. UIAlertControllerがiOS 9で動作しない
- 18. Xの下で可能な最も低いレベルでフレームバッファを読み取る
- 19. 複雑なシナリオで最初のviewControllerに戻る方法は?
- 20. メインviewcontrollerを下からuitableviewに戻す方法
- 21. swift show UIAlertControllerのエラーメッセージの配列
- 22. iOSでViewControllerが表示されなくてもメソッドを続行
- 23. のViewController
- 24. のViewController
- 25. Swift:閉鎖中のUIAlertControllerを提示
- 26. 非ストーリーボードのViewControllerからViewControllerに移動
- 27. 別のViewControllerでViewControllerのインスタンスを識別する
- 28. 試みが提示する<UIAlertController:>の<のViewController:>そのビュー私はResearchKitを使用してプロジェクトに取り組んでいますウィンドウ階層
- 29. 最下位バイトの取得
- 30. サイト最下部のスペース
良い答えがここに見つけることができる:http://stackoverflow.com/q/26554894/3050403 – kelin