【问题标题】:Back when current view controller is not presented by segue. Swift当 segue 未呈现当前视图控制器时返回。迅速
【发布时间】:2016-04-30 15:05:31
【问题描述】:

我试图在不使用 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)
}

【问题讨论】:

  • 打印 self.navigationcontroller.viewcontrollers 并在 backbuttonTapped 方法中放置一个断点并相应地更新代码
  • 我尝试打印(self.navigationController?.viewControllers)。它打印 []
  • 没错,它不会回到前一个屏幕,因为您正在呈现一个视图屏幕并试图通过使用不起作用的 popviewcontroller 来返回,使用dismissviewcontroller它将返回到前一个屏幕。
  • 它有效。这是因为我在旧视图控制器之上创建了一个视图控制器,所以我必须使用dismissviewcontroller 来关闭它。对吗?
  • 是的,现在很好。我用完整的细节回答了您的问题,如果正确,请标记为正确。谢谢

标签: swift uiviewcontroller uinavigationcontroller back


【解决方案1】:

这是您的导航流程:

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

如果您展示任何视图控制器,那么 popviewcontroller 将无法工作,而是使用dismissviewcontroller 来显示上一个屏幕。

使用这个:

self.dismissViewControllerAnimated(true, completion: {})

解决了! 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2017-07-09
    • 1970-01-01
    • 2016-02-11
    • 2013-01-11
    • 2015-02-27
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多