gpt4 book ai didi

ios - Swift:在共享容器 View 中更新标签

转载 作者:行者123 更新时间:2023-12-01 22:03:34 26 4
gpt4 key购买 nike

语境:

我有三个 ViewController 共享一个容器 View 。 ContainerViewController 包含一个将被修改的变量,例如银行。

我有一个向银行添加 10000 的按钮。单击时它会向银行添加 10000,尽管它仅在您导航到另一个选项卡或返回时才会显示。

enter image description here

enter image description here

我一直在研究这个问题,似乎明白我需要使用 prepare(for segue:) 来更新它,但我似乎无法让它工作。

问题:如何立即更新容器 View (因为我最终希望在其中添加其他标签)以便新值反射(reflect)并显示在同一个 VC 上?

HomeViewController(带按钮)

class HomeViewController: UIViewController {

@IBOutlet weak var containerView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

}

@IBAction func bankButton(_ sender: Any) {

bank += 10099
print("\(bank)")
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "container" {
let vc = segue.destination as! ViewController

}
}

}

}

View Controller (容器)
var bank = 10000;

class ViewController: UIViewController {


@IBOutlet weak var cashLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool) {
cashLabel.text = "\(bank)"
}
}

最佳答案

有很多答案,例如,RxSwift 可以帮助你,或者更简单的东西,比如通知中心。两者都与观察者一起工作,我希望这段代码可以帮助你。

在您的容器 View 中添加此代码

var bank = 10000
viewDidLoad(){
NotificationCenter.default.addObserver(self, selector: #selector(updateLabel(_:)), name: NSNotification.Name(rawValue: "updateLabel"), object: nil)
}

@objc func updateLabel(_ notification: Notification){
if let data = notification.object as? Int{
bank += data
cashLabel.text = "\(bank)"
}
}

现在,将此代码添加到您的主视图 Controller 中
@IBAction func bankButton(_ sender: Any) {
bank += 10099
print("\(bank)")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateLabel"), object: bank)
}

我建议你研究一下 RxSwift,并结合起来,后者仅适用于 iOS 13

关于ios - Swift:在共享容器 View 中更新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60017763/

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