如何使用 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)
我有一个 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)