在Swift中,如何永久更改不同ViewController中标签的文本?

时间:2017-03-25 09:26:25

标签: ios swift cocoa uiviewcontroller

在我的一个名为SecondViewController的ViewControllers中,我有以下代码,它允许我在另一个ViewController中更改一个名为ThirdViewController的字符串变量。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ThirdViewController = segue.destinationViewController as ThirdViewController

    if (DestViewController.order1Text == "" ) {
    DestViewController.order1Text = " \(pizzaSize) \(crustSelected) crust pizza, sauce on \(sauceChoice) pizza"
    } else {
    DestViewController.order2Text = " \(pizzaSize) \(crustSelected) crust pizza, sauce on \(sauceChoice) pizza"
    }
}

ThirdViewController,包含以下代码,虽然" order1Label"标签更改成功(因为它绑定到字符串变量)当Segue将我带到ThirdViewController时,当我离开ThirdViewController并移动到另一个ViewController时,该标签中的文本消失。如何使文本保留在我从外部ViewController控制的标签中?

import UIKit

class ThirdViewController: UIViewController {

var order1Text = String()
var order2Text = String()

override func viewDidLoad() {
    super.viewDidLoad()
    order1Label.text = order1Text
    order2Label.text = order2Text
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

@IBOutlet weak var order1Label: UILabel!
@IBOutlet weak var order2Label: UILabel!

}

1 个答案:

答案 0 :(得分:-1)

使您的IBOutlet强大属性如下所示

@IBOutlet strong var order1Label: UILabel!

<强>原因

强大的参考(在大多数情况下您会使用)意味着您想拥有&#34;拥有&#34;您使用此属性/变量引用的对象。只要您使用强引用指向它,编译器就会注意您分配给此属性的任何对象都不会被销毁。只有将属性设置为nil后,对象才会被销毁(除非一个或多个其他对象也拥有对它的强引用)。

相反,如果参考较弱,则表示您不想控制对象的生命周期。您引用弱的对象只会继续存在,因为至少有一个其他对象对它有强烈的引用。一旦不再是这种情况,对象就会被破坏,你的弱属性将自动设置为nil。 iOS中最常见的弱引用用例是:

  1. 委托属性,通常被弱引用以避免保留周期,
  2. 视图控制器主视图的子视图/控件,因为主视图已经强烈保存了这些视图。