📜  swift go back to previous view controller - Swift (1)

📅  最后修改于: 2023-12-03 14:47:47.501000             🧑  作者: Mango

Swift中返回上一个视图控制器

在Swift应用程序中,返回上一个视图控制器是一个常见的任务。通常用户通过导航控制器或者模态展示出这些视图控制器。在这篇文章中,我们将了解几种方法来实现返回上一个视图控制器的功能。

使用导航控制器

当一个视图控制器通过导航控制器展示出来时,我们可以轻松地返回到上一个视图控制器。使用导航控制器时,我们可以使用以下代码返回上一个视图控制器:

navigationController?.popViewController(animated: true)

此代码将会弹出当前视图控制器并返回上一个视图控制器。当animated参数为true时,返回过程将显示过渡动画。

使用模态展示

当我们通过模态展示展示出视图控制器时,我们需要不同的方法返回到上一个视图控制器。

dismiss(animated: true, completion: nil)

此代码将会关闭当前模态展示的视图控制器,并返回上一个视图控制器。当animated参数为true时,返回过程将显示过渡动画。

使用协议

我们可以在目标视图控制器中定义一个协议,以便在返回到上一个视图控制器时,向其传递数据。下面是一个简单的例子:

protocol MyDelegate {
    func didTapBackButton(with data: String)
}

在目标视图控制器中,我们可以编写以下代码来调用协议方法:

delegate?.didTapBackButton(with: "The data I want to pass back")

然后,在上一个视图控制器中,我们需要实现这个协议,并在dismisspop方法中调用该协议:

class MyViewController: UIViewController, MyDelegate {
    func didTapBackButton(with data: String) {
        print(data)
    }

    // Present the target view controller
    func presentTargetVC() {
        let targetVC = TargetViewController()
        targetVC.delegate = self
        present(targetVC, animated: true, completion: nil)
    }
    
    // or push the target view controller
    func pushTargetVC() {
        let targetVC = TargetViewController()
        targetVC.delegate = self
        navigationController?.pushViewController(targetVC, animated: true)
    }
    
    // Dismiss the target view controller and call the delegate method
    func dismissTargetVC() {
        dismiss(animated: true) {
            self.delegate?.didTapBackButton(with: "The data I want to pass back")
        }
    }
}

通过使用协议,我们可以在返回到上一个视图控制器时向其传递数据。这是一种灵活且可控的方法。

结论

以上是几种主要的方法,可以在Swift中返回上一个视图控制器。无论你想使用哪种方法,理解这些方法的差异和优缺点是非常重要的。这将帮助你更好地管理你的应用程序,提高用户体验。