簡體   English   中英

Swift –從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM