ios - 从一个 VC 切换到另一个时在 View Controller 中保留数据

标签 ios swift uiviewcontroller segue

我有三个 View ,每个 View 都有自己的 View Controller :VC1、VC2、VC3。 用户将频繁地在三个 View 中的每一个之间来回切换,向前和向后。 每个 View 都包含数据:从前一个 View 共享的数据和该 View 独有的数据。 当用户返回到他已经访问过的View时,需要保留该View上显示的数据(与他上次访问该View时看到的数据相同),而不是第一次设置为默认值他参观了这个观点。

在第一个 View Controller VC1 中,我使用 prepare for segue 将数据从 VC1 推送到 VC2 或 VC3:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueToVC2” {
        let destinationViewController: VC2 = segue.destination as! VC2;
    destinationViewController.passedData1 = firstAmount
    destinationViewController.passedData2 = secondAmount
    destinationViewController.passedData3 = thirdAmount

    } else {
        let destinationViewController: VC3 = segue.destination as! VC3;
    destinationViewController.passedData1 = firstAmount
    destinationViewController.passedData2 = secondAmount
    destinationViewController.passedData3 = thirdAmount
    destinationViewController.passedData4 = fourthAmount
  }

通过点击每个 View 上的“返回”按钮,我返回到上一个 View :

@IBAction func goBackButtonPressed(_ sender: Any) {
    print("Back Button Pressed!")
    self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
}

我在向后传递数据时遇到问题。当我从 VC1 返回到 VC2 时,数据已重置为 0。我没有从 VC2 返回到 VC1 或从 VC3 返回到 VC2 的转场。这是否是将数据传回的最干净的方法:在 Main.storyboard 中创建另一个从 VC2 到 VC1 的 segue,然后将另一个“if”添加到我的 prepare for segue 以检查 VC1?

我在 View Controller 之间来回传递所有这些变量,但只在每个 View Controller 中使用其中的一些变量。这似乎是一种浪费,我不认为我在这里走在正确的轨道上。

有什么帮助或建议吗?

最佳答案

View Controller 不应该存储数据。它们负责协调模型对象和 View 对象。这就是他们的重点。您正在寻找的模式称为 MVC (模型- View - Controller ),它是 iOS 开发的核​​心部分。

将您的数据移出 View Controller 并将其放入模型类中。每个 View Controller 都应该从模型中获取数据,并将更新发送到模型中。 View Controller 之间唯一应该传递的是要处理的模型对象,并且大多数时候只需要在一个方向(向下堆栈)传递。

委派在这里可能是一个有用的工具,您还可以研究“unwind segues”,它旨在帮助您向上游发送数据。但同样,您应该发送的数据主要是对模型的引用,模型本身需要存在于 View Controller 之外。

它在 Objective-C 中,但仍然是 Apple 在 MVC 设计方面最好的简单示例之一是 TheElements , 值得作为基础进行探索。即使不阅读 Objective-C,您也可以看到各个部分是如何组合在一起的。

我没有像 TheElements 那样研究它,但是 Lister声称是使用现代 iOS 技术在 Swift 中很好地演示了 MVC 模式。

关于ios - 从一个 VC 切换到另一个时在 View Controller 中保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42609906/

相关文章:

swift - Swift 2 中 for 循环的奇怪行为

ios - iOS 8 中呈现的 View Controller 中的界面方向不正确

ios - iPad Mini 的最大视频输出分辨率?

javascript - 使用适用于 ios/android 的 jquery ui 键盘插件

ios - 如何在 Moya 中添加参数?

ios - 是否可以更改所有 View Controller 的状态栏颜色?

iPhone 应用程序崩溃并出现错误 [UIApplication _cachedSystemAnimationFenceCreatingIfNecessary :]

ios - 在部分代码中抑制 "is partial: introduced in iOS"

ios - 在展开可选内容时,将 Parse PFUser 信息快速加载到 View 中失败,并发现 nil

ios - 以编程方式在 ios swift 中创建 Segues