如何使用 Swift 关闭 ios 中的 viewController

How to dismiss viewController in ios using Swift

我有一个 viewController,它只包含一个图像视图。我想在应用程序加载时显示它,例如从 Web 服务获取数据。所以我在我的 loaderViewController 中创建了一个函数

func showLoading(viewController:UIViewController) {
    viewController.presentViewController(LoadingViewController(), animated: false, completion: nil)
}

这是按预期工作的,当我在需要时调用此函数时如下所示

var loader = LoadingViewController()
loader.showLoading(self)

显示 viewController 和图像。

但是现在想在需要时关闭此 viewController 但我无法这样做,这就是我到目前为止所尝试的,我在我的 LoaderViewController 中创建了另一个函数

func dismissLoader() {
    let load = LoadingViewController()
    load.dismissViewControllerAnimated(true) {
        print("Dismissing Loader view Controller")
    }
}

但它不起作用,viewController 并没有从屏幕上消失。

请指导我

不要每次都let load = YASLoadingViewController(),你正在创建不同的控制器 做一次然后只使用 load 关闭或显示

您不必创建加载程序的新实例并对其调用 dismissViewControllerAnimated(_:Bool)

直接打电话

self.dismissViewControllerAnimated(true)

在你的 viewController

因此,您的函数将是

func dismissLoader() {

    dismissViewControllerAnimated(true) {
        print("Dismissing Loader view Controller")
    }
}
self.dismissViewControllerAnimated(false, completion: nil)

您的代码有很多缺陷。您尝试实现此目标的方式不是一个好习惯。但是,如果您想要快速修复,并且只想修改现有方法,请执行此操作,

func dismissLoader() {
    self.dismissViewControllerAnimated(true) 
    print("Dismissing Loader view Controller")
}

当你展示一个新的 LoadingViewController 时,保留对它的引用,这样你就可以调用上面的方法。

无论如何,即使没有引用,上面的代码也应该可以工作,因为 iOS 将此方法委托回其层次结构的父 ViewController,如果没有提供 ViewController 可用在调用 ViewController.

您必须在父视图控制器中为 LoadingViewController 存储 link:

var loader: LoadingViewController?

func showLoadingIn(viewController: UIViewController) {
   loader = LoadingViewController() // create new instance before presentation
   viewController.presentViewController(loader!, animated: false, completion: nil)
}

func dismissLoader() {
    loader?.dismissViewControllerAnimated(true) {
        print("Dismissing Loader view Controller") 
    }
}

在 Swift 3 中,您可以执行以下操作。

self.dismiss(animated: true)