2016-04-30 3 views
0

Я пытаюсь представить 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) 
} 
+0

print self.navigationcontroller.viewcontrollers и поставить точку останова в backbuttonTapped метод и код обновления соответственно –

+0

Я попытался напечатать (self.navigationController? .viewControllers). Он печатает [] – Tony

+0

Точно это не вернется к предыдущему экрану, потому что вы представляете viewcreen и пытаетесь вернуться с помощью popviewcontroller, который не будет работать. Используйте функцию rearviewcontroller, которая вернется к предыдущему экрану. –

ответ

0

Вот поток вашей навигации:

Текущий экран - Представляя новый экран (который сам по себе встраивать в навигационном контроллере с vc2), поэтому Popviewcontroller не будет работать.

Если вы представляете какой-либо диспетчер представлений, тогда функция popviewcontroller не будет работать с использованием функции упреждения viewviewcontroller для выхода на предыдущий экран.

Использование Это:

self.dismissViewControllerAnimated(true, completion: {}) 

Решено! Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^