UILabel不显示变量是否具有值

时间:2018-07-16 14:15:05

标签: ios swift uilabel

我有一个标签(在我的secondVC中),该标签显示来自firstVC的隔离Double。在secondVCs viewDidLoad中,我正在打印passedDouble,并且正在打印正确的数量,因此我知道Double被正确地隔离了。我的UILabel在secondVC中,并且仅在passedDouble = 0.0时显示金额。

SecondViewController:

@IBOutlet weak var totalLabel: UILabel!

var passedDouble = 0.0

override func viewDidLoad() {
    super.viewDidLoad()

    print("testing for a value \(passedDouble)")
    totalLabel.text = String("\(passedDouble)")
}

例如,如果传递的值为12.2,它将打印此内容

  

测试值12.2

但是标签从视图中完全消失了。

但是如果传递的值为0.0,则会打印

  

测试值0.0

,标签显示为0.0

在情节提要中,我将标签标准文本保留为Label。因此,我知道标签正确连接,因为其文本更改为 IF ,值为零。

编辑:我要为其分配值的firstVC的代码

var totalPrice: Double = Double()

@IBAction func basketAction(_ sender: UIButton) {
    for cost in priceDictionaryToBeSent {
        totalPrice += Double(cost)!
    }
    performSegue(withIdentifier: "basket", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "basket" {
        if let basketVC = segue.destination as? BasketViewController {
            basketVC.passedDouble = totalPrice
            //This is sending the correct price
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我最好的猜测是,prepare(for:sender:)中的basketVC已经加载,因此在设置view之前已调用了它的viewDidLoad

我希望每次basketVC.passedDouble = totalPrice更新时都使用setter更新标签。将passedDouble代码更改为此:

BasketViewController

答案 1 :(得分:0)

感谢米兰·诺萨(MilanNosáľ)说该视图可能已经加载,实际上已经加载了,所以我将代码从我的viewDidLoad中的BasketViewController移到了viewDidAppear,如下所示:

override func viewDidAppear(_ animated: true) {
    super.viewDidAppear(true)
    print("testing for total price £\(passedDouble)")
    totalLabel.text = "Total price £\(passedDouble)"
}