【问题标题】:How to dismiss viewController in ios using Swift如何使用 Swift 在 ios 中关闭 viewController
【发布时间】:2016-12-19 08:35:13
【问题描述】:

我有一个只包含一个 imageview 的 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 没有从屏幕上消失。

请指导我

【问题讨论】:

  • YASLoadingViewController 和 LoadingViewController 一样吗??

标签: ios swift uiviewcontroller swift2


【解决方案1】:

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

【讨论】:

  • 这是一个答案吗?
  • 您的答案通常是正确的,但如果您提供更广泛的解释,它们将非常有用。我认为提问者通常没有足够的资格来理解你的简短答案
【解决方案2】:

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

只要打电话

self.dismissViewControllerAnimated(true)

在您的视图控制器上

所以,你的功能将是

func dismissLoader() {

    dismissViewControllerAnimated(true) {
        print("Dismissing Loader view Controller")
    }
}

【讨论】:

  • 你能帮我重写dismissLoader函数吗?
【解决方案3】:
self.dismissViewControllerAnimated(false, completion: nil)

【讨论】:

    【解决方案4】:

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

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

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

    无论如何,即使您没有持有引用,上面的代码也应该可以工作,因为如果调用的 ViewController 上没有可用的 ViewController,iOS 会将这个方法委托给它的层次结构的父 ViewController。

    【讨论】:

      【解决方案5】:

      您必须在父视图控制器中存储LoadingViewController 的链接:

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

      【讨论】:

        【解决方案6】:

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

        self.dismiss(animated: true)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 1970-01-01
          • 1970-01-01
          • 2021-07-24
          • 1970-01-01
          • 2016-09-17
          • 1970-01-01
          相关资源
          最近更新 更多