我在Swift中创建了一个名为infoModel的文件。这用于将信息从一个ViewController传递到另一个ViewController,并且信息写在标签中。这非常有效,但我希望能够删除该信息,或者至少将其从标签中删除。
我尝试设置label = nil,但当我更改为其他viewController并返回时,信息会弹回。
我应该如何删除数据?
代码infoModel:
import UIKit
class infoModel: NSObject {
var info: String = ""
var info2: String = ""
var info3: String = ""
var info4: String = ""
func currentInfo() -> String {
//return a string with the current info
return info + "" + info2 + "" + info3 + "" + info4 + ""
}
}
在视图控制器中:
class collectViewController: UIViewController {
var myInfo = infoModel()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
infoLabel.text = myInfo.currentInfo()
}
}
这是我要删除的infoLabel。
*编辑:该应用正在收集用户的信息。它的方式就是用户按下/某些按钮/按钮,表示该特定用户的合适值。然后,信息将显示在不同的View Controller中。如果用户按错了按钮,我希望他们能够删除/删除信息并重新开始。 removebutton与infoLabel位于同一个View控制器中。 当所有信息都正确时,用户然后按下另一个写入Firebase数据库的按钮。
所以我的目标是用户能够删除/删除信息,然后重新开始。
答案 0 :(得分:2)
不要将初始值设为myInfo
,将其设为可选:
var myInfo: infoModel?
和
infoLabel.text = myInfo?.currentInfo()
现在如果没有模型,则不会设置任何内容。
此外,您可以使用以下方式自动更新标签:
var myInfo: infoModel? {
didSet {
_ = self.view // load the view if not loaded
infoLabel.text = myInfo?.currentInfo()
}
}
现在只需设置myInfo = nil
即可清除标签。
答案 1 :(得分:0)
您需要将模型用作数据和更改的容器。 当用户按下各种按钮时,您需要更新模型,当用户单击删除按钮时,您需要更新模型以反映该状态。
不是将整个对象设置为nil,而是将内部变量设置为nil,以便模型对象始终存在。你需要做更多的解缠。
var info: String? = nil
var info2: String? = nil
var info3: String? = nil
var info4: String? = nil
如果您不想这样做,则需要检查模型的可为空性,并在它为零时创建一个新模型(如Sultan在其他响应中所述)
(我还建议您使用结构而不是类)
然后,您需要在更新模型时重绘UI。
我认为在你的简单情况下,即使在控制器的视图上运行setNeedsDisplay
也应该这样做
答案 2 :(得分:0)
我实际上解决了这个问题,因为这样做无法将数据重新添加到标签:
myInfo?.info = ""
myInfo?.info2 = ""
myInfo?.info3 = ""
myInfo?.info4 = ""