Swift - добавление подпредставления в View Controller из AppDelegate - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь добавить подпредставление из AppDelegate к текущему показу UIViewController, и я заметил, что если на этом UIViewController отображается предупреждение, когда AppDelegate добавляет подпредставление, подпредставление добавляется в 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)
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Если вы хотите, чтобы в данный момент отображался 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 или ваш пользовательский контроллер, все зависит от вашего потока навигации.

0 голосов
/ 15 сентября 2018

Проблема заключается в том, что сообщение о предупреждении, по сути, представляет собой 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
    }
}

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...