Я пытаюсь представить VC2 из VC1 без использования segue. Оно работает. Затем я попытался использовать self.navigationController?.popViewControllerAnimated(true)
, но он не работает. Мне интересно, какой код я должен использовать для возврата от VC2 к VC1. Ниже приведен код appDelegate.Назад, когда текущий контроллер просмотра не представлен segue. Swift
AppDelegate
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let VC2 = storyboard.instantiateViewControllerWithIdentifier("VC2") as! VC2
let navController = UINavigationController(rootViewController: VC2)
self.topViewController()!.presentViewController(navController, animated: false, completion: nil)
func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
if let MMDrawers = base as? MMDrawerController {
for MMDrawer in MMDrawers.childViewControllers {
return topViewController(MMDrawer)
}
}
if let nav = base as? UINavigationController {
return topViewController(nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(presented)
}
return base
}
VC2
@IBAction func backButtonTapped(sender: AnyObject) {
print(self.navigationController?.viewControllers) // print([<MyAppName.VC2: 0x12f147200>])
self.navigationController?.popViewControllerAnimated(true)
}
print self.navigationcontroller.viewcontrollers и поставить точку останова в backbuttonTapped метод и код обновления соответственно –
Я попытался напечатать (self.navigationController? .viewControllers). Он печатает [] –
Tony
Точно это не вернется к предыдущему экрану, потому что вы представляете viewcreen и пытаетесь вернуться с помощью popviewcontroller, который не будет работать. Используйте функцию rearviewcontroller, которая вернется к предыдущему экрану. –