Home > OS >  ViewController present does not always work
ViewController present does not always work

Time:11-24

I have some problems displaying a viewcontroller in my IOS app. Sometimes it works and the view is displayed, but sometimes and I guess when the context is a bit different it will not work. No errors or warnings in the debugger and it can find the ViewController from the Main storyboard (at least it is not nil) It use to work with self.present but that seems not to work anymore.

  @IBAction func showHistoryButton(_ sender: MDCButton) {
        let exercisesHistoryVC = ExercisesHistoryViewController.instantiate(from: .Main)
        exercisesHistoryVC.modalPresentationStyle = .fullScreen
        let appDeligate = UIApplication.shared.delegate as! AppDelegate
        appDeligate.window?.rootViewController!.present(exercisesHistoryVC,animated: true,completion: nil)
       // parent?.present(exercisesHistoryVC, animated: true, completion: nil)
    }

CodePudding user response:

Use the code like below,while Present New View Controller

@IBAction func showHistoryButton(_ sender: MDCButton) {
        let exercisesHistoryVC = ExercisesHistoryViewController.instantiate(from: .Main)
        exercisesHistoryVC.modalPresentationStyle = .fullScreen
        UIApplication.topViewController()?.present(exercisesHistoryVC, animated: false, completion: nil)
 }

extension UIApplication {
    
    static func topViewController(base: UIViewController? = UIApplication.shared.delegate?.window??.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController, let selected = tab.selectedViewController {
            return topViewController(base: selected)
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
    }
    
}
  • Related