从模型

时间:2017-08-10 13:15:59

标签: ios swift uilabel

我在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数据库的按钮。

所以我的目标是用户能够删除/删除信息,然后重新开始。

3 个答案:

答案 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 = ""