![](/img/trans.png)
[英]Swift: how to close view controller and navigation controller launched from AppDelegate
[英]Swift – Add subview to View Controller from AppDelegate
我試圖在當前顯示的UIViewController
上從AppDelegate
添加子視圖,並且我注意到,如果當AppDelegate
添加子視圖時該UIViewController
正在顯示警報消息,則該子視圖將添加在UIAlertController
而不是UIViewController
。 在UIViewController
上顯示子視圖而不是當前UIViewController
可能顯示的任何其他子視圖的最佳方法是什么? 這是我當前的代碼。
@objc func showStudentLeftTheTestAlert(notification: NSNotification) {
if let userInfo = notification.userInfo {
if let visibleVc = self.window?.visibleViewController {
// do some other stuff here
visibleVc.view.addSubview(StudentLeftTestAlertViewController.sharedInstance.view)
}
}
}
問題是,警報消息,其實是一個UIViewController
在你原來提出的模態上UIViewController
。 如果要到達頂部shown
視圖控制器(未presented
),可以將此方法添加到AppDelegate
。 如果您使用的是導航堆棧,它將返回根視圖控制器或頂視圖控制器。
func getTopViewController() -> UIViewController? {
let rootViewController = self.window?.rootViewController
if let navigationController = rootViewController as? UINavigationController {
// get the top view controller from stack if needed
return navigationController.topViewController
} else {
return rootViewController
}
}
希望對您有幫助
如果要當前顯示UIViewController,可以添加以下擴展名:
// MARK: UIApplication extension
extension UIApplication {
// Get top view controller
static var topViewController:UIViewController? {
get{
if var topController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
return topController
}else{
return nil
}
}
}
}
和使用是這樣的:
guard let vc = UIApplication.topViewController else { return }
vc是您的頂級控制器,可以是UINavigationController,UITabbarcontroller或您的自定義控制器,所有這些都取決於您的導航流程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.