swift2 如何在iOS中使用Swift消除viewController

uujelgoq  于 2022-11-06  发布在  Swift
关注(0)|答案(6)|浏览(305)

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

vngu2lb8

vngu2lb81#

您不必创建加载器的新示例并在其上调用dismissViewControllerAnimated(_:Bool)
打电话

self.dismissViewControllerAnimated(true)

在您的viewController上
因此,您的函数将是

func dismissLoader() {

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

6vl6ewon2#

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

self.dismiss(animated: true)
hrysbysz

hrysbysz3#

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

kt06eoxx

kt06eoxx4#

self.dismissViewControllerAnimated(false, completion: nil)
3zwjbxry

3zwjbxry5#

你的代码有很多缺陷。你试图实现这一点的方式并不是一个好的实践。但是,如果你想快速修复,并且只想修改你现有的方法,那么就这样做吧,

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

当你展示一个新的LoadingViewController时,保留一个对它的引用,这样你就可以调用上面的方法。
无论如何,即使没有引用,上面的代码也应该可以工作,因为如果调用的ViewController上没有可用的ViewController,iOS会将此方法委托回其层次结构的父ViewController。

vd8tlhqk

vd8tlhqk6#

您必须在父视图控制器中存储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") 
    }
}

相关问题