我有一个带有标签(“titre”)和按钮的视图控制器。
class PresentationViewController: UIViewController, UIScrollViewDelegate,SKProductsRequestDelegate, SKRequestDelegate {
@IBOutlet weak var titre: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let defaults = UserDefaults.standard
if !defaults.bool(forKey: "XXXXXX.\(GlobalVariables.sharedinstance.circuitselectionne!)"){
titre.text = "2,90€"
}
else {
titre.text = "Démarrer la visite ! "
}
触发此按钮时,将启动另一个类中的功能。
在这个函数中,我们定义在初始viewController中检查的变量的布尔值。
let defaults = UserDefaults.standard
defaults.set(true,forKey:"XXXXXX.\(nomtelechargementàajouter)")
但是当它完成时,我的Viewcontroller中没有更新titre.text
。
那么如何在ViewController中刷新titre.text
的值?
另一点是可以在其他ViewController中调用此函数。
有什么想法吗?
答案 0 :(得分:2)
您可以使用通知和观察者来控制数据与控制器之间的代码行为。 在函数的末尾,定义你在viewController的viewDidload中检查的布尔变量,发布如下通知:
id
通过此操作,您可以创建一个名为 VariableDefined 的通知(您可以根据需要对其进行命名)。 object 参数允许您使用此通知发送数据或任何参数。 然后,您必须设置一个侦听器来收听此通知。谁对你的布尔变量感兴趣? 您的viewController 。 将此通知的监听器放在您的视图控制器上,如下所示:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "VariableDefined"), object: nil)
使用此方法,您将定义一个名为VariableDefined的通知的侦听器,并使用方法let name = Notification.Name(rawValue: "VariableDefined")
NotificationCenter.default.addObserver(
self, selector: #selector(checkVariable),
name: name, object: nil)
处理它。
最后,在此处理程序上,您可以更新标签标题:
checkVariable
希望它会对你有所帮助。这是模型和视图控制器之间通信的一种方式。