gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:15:01 25 4
gpt4 key购买 nike

我有三个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com