从另一个类更新label.text

时间:2017-11-03 06:24:07

标签: swift uilabel

我有一个带有标签(“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中调用此函数。

有什么想法吗?

1 个答案:

答案 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

希望它会对你有所帮助。这是模型和视图控制器之间通信的一种方式。