当segue没有呈现当前视图控制器时返回。迅速

时间:2016-04-30 15:05:32

标签: swift uiviewcontroller uinavigationcontroller back

我试图在不使用segue的情况下从VC1呈现VC2。有用。然后,我尝试使用self.navigationController?.popViewControllerAnimated(true)来支持但它不起作用。我想知道从VC2到VC1应该使用什么代码。下面的代码在appDelegate中。

的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)
}

1 个答案:

答案 0 :(得分:0)

以下是导航流程:

当前屏幕 - 呈现一个新屏幕(它本身嵌入了一个带vc2的导航控制器中),因此Popviewcontroller无法工作。

如果你提出任何视图控制器,那么popviewcontroller不会工作,而是使用dismissviewcontroller来显示前一个屏幕。

使用此:

self.dismissViewControllerAnimated(true, completion: {})

解决! 谢谢。