gpt4 book ai didi

ios - 在 var update 中自动更新 UILabel

转载 作者:行者123 更新时间:2023-11-29 01:14:54 25 4
gpt4 key购买 nike

在我的项目的某个时刻,我得到了一个显示数组中元素数量的 UILabel。我想在修改数组时自动更新标签文本。我可以将我的 UILabel 设为全局并使用数组上的“didSet”访问它,但我不想将我的所有 UILabel 设为全局(我为 8 个不同的进化变量获得了 8 个 UILabel)。

这是一种更新 UILabel 内容的方法,例如指针或对特定变量的引用?

编辑一些代码示例:我有一个全局的字典,

let eg:[string : [SomeClass]]!

在 ViewController 中我有一个 UILabel,带有

label.text = eg["key"].count

如果我做了类似的事情,我想自动更新值显示

eg["key"].append(something)

最佳答案

由于您使用的是全局数据,因此您可以尝试的一种方法是使用 NSNotificationCenter。如果您要将全局数据封装在一个对象内,则该对象可以在每次更新数据时发布通知。

这种方法将允许多个观察者有机会“自动”对全局状态的变化采取行动。它还将增加防止 UIKit 元素被暴露的好处。

在已发布通知的 userInfo 属性内,您可以放置​​键和关联的计数值。

使您的 View Controller 成为此通知的观察者。当它收到通知时,它可以使用 userInfo 中收到的数据来更新其 UILabels 本身。

一个简单的实现可能如下所示:

class SomeClass {
// ...
}

class MyGlobalObject {
var eg:[String : [SomeClass]]!

static let sharedInstance = MyGlobalObject()
private init() {
eg = ["someKey":[], "someOtherKey":[]]
}

func appendTo(key:String, value:SomeClass) {
eg[key]?.append(value)
NSNotificationCenter.defaultCenter().postNotification(NSNotification(name:"ValueChanged", object: nil, userInfo: ["Key":key, "Count" : (eg[key]?.count)!]))
}
}

class ViewController: UIViewController {
// Define labels, etc....

override func viewDidLoad() {
super.viewDidLoad()

// Put this wherever makes the most sense. viewWillAppear() works too. Don't forget to remove yourself as an observer when you are done.
NSNotificationCenter.defaultCenter().addObserver(self, selector:"didUpdate:", name: "ValueChanged", object: nil)
}

func didUpdate(notif:NSNotification) {
print("Received Notification!")
let userInfo = notif.userInfo
// Update appropriate label with the data
}
}

然后在应用程序中的任何位置,您都可以执行以下操作:

MyGlobalObject.sharedInstance.appendTo("someKey", value: SomeClass())

关于ios - 在 var update 中自动更新 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com