Показать два ViewController из AppDelegate

Когда приложение запускается - запустите SigninView - все в порядке. Далее в случае успеха - мне нужен showTripController (). Функция работает, но ничего не показывает? Что за проблема?

func showSigninView() {
    let controller = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVAuthorizationViewController")
    self.window?.rootViewController!.presentViewController(controller!, animated: true, completion: nil)
}

func showTripController() {
    let cv = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVTripTableViewController")
    let nc = UINavigationController()
    self.window?.rootViewController!.presentViewController(nc, animated:true, completion: nil)
    nc.pushViewController(cv!, animated: true);
}

person Kirill Baranov    schedule 27.04.2016    source источник


Ответы (2)


Прежде всего, вы должны добавить это, прежде чем использовать window:

self.window.makeKeyAndVisible()

Еще одна вещь, о которой следует помнить:

Иногда keyWindow могло быть заменено окном с нулевым rootViewController (показывающим UIAlertViews, UIActionSheets на iPhone и т. д.), в этом случае вы должны использовать свойство окна UIView.

Итак, вместо использования rootViewController используйте представленный им верхний:

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.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)
        }
        return base
    }
}

if let topController = UIApplication.topViewController() {
    topController.presentViewController(vc, animated: true, completion: nil)
}
person Alessandro Ornano    schedule 27.04.2016

Замените последние 3 строки showTripController, как показано ниже:

let nc = UINavigationController(rootViewController: cv));
self.window!.rootViewController = nc
person Arun Gupta    schedule 27.04.2016