在 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 致命错误:在 segue 上展开 Optional 值时意外发现 nil