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

Posted

技术标签:

【中文标题】在 Swift 中,如何在不同的 ViewController 中永久更改 a 标签的文本?【英文标题】:In Swift, how do I permanently change the text of a label of a within a different ViewController? 【发布时间】:2017-03-25 09:26:24 【问题描述】:

在我的一个名为 SecondViewController 的 ViewController 中,我有以下代码,它允许我更改另一个 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!


【问题讨论】:

将代码从viewDidLoad更改为viewwillapper并检查一次c 【参考方案1】:

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

@IBOutlet strong var order1Label: UILabel!

原因

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

相比之下,使用弱引用表示您不想控制对象的生命周期。您弱引用的对象仅存在,因为至少有一个其他对象持有对它的强引用。一旦不再是这种情况,对象就会被销毁,并且你的弱属性将自动设置为 nil。 ios 中最常见的弱引用用例是:

    委托属性,这些属性通常被弱引用以避免保留循环,并且 视图控制器的主视图的子视图/控件,因为这些视图已经被主视图强占。

【讨论】:

我尝试使用 viewwillappear 功能并使插座变得强大,但一旦我离开 ThirdViewController,都没有帮助我保存数据。一旦我离开 ThirdViewController 并回来,order1Label 中的文本就消失了。任何想法为什么?覆盖 func viewWillAppear(animated: Bool) order1Label.text = order1Text order2Label.text = order2Text @IBOutlet var order1Label: UILabel! @shampouya 调用 .viewWillAppear 的超级用户,就像这样 super.viewwillappear(true)。你能解释一下你弹出这个thirdVC 还是推其他VC?我的意思是从 3rdVC 要么你回去然后来,要么前进然后回到 3rdVC?

以上是关于在 Swift 中,如何在不同的 ViewController 中永久更改 a 标签的文本?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:从另一个类调用 UIButton press

Swift:NSUserDefaults 没有立即设置

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil

向 UINavigationBar 添加搜索按钮:Swift

如何将步进值传递给 ViewController?

如何引用在不同的 .swift 文件中定义的数据类型?