Ios 如何更新其他控制器';swift中的用户界面?

Ios 如何更新其他控制器';swift中的用户界面?,ios,iphone,swift,Ios,Iphone,Swift,我的应用程序中有几个控制器。当我的应用程序调用一个控制器中的一个函数时,我想更新其他控制器的UI。我怎样才能做到这一点 class FirstViewController: UIViewController { func updateUI {...} } class SecondViewController: UIViewController { func updateUI {...} } class ThirdViewController: UIViewContro

我的应用程序中有几个控制器。当我的应用程序调用一个控制器中的一个函数时,我想更新其他控制器的UI。我怎样才能做到这一点

class FirstViewController: UIViewController {
    func updateUI {...}  
}

class SecondViewController: UIViewController {
    func updateUI {...}  
}

class ThirdViewController: UIViewController{
    func updateAllUI {...} # I want call FirstViewController().updateUI() and SecondViewController().updateUI() here
}
但是FirstViewController()意味着我创建了一个新的FirstViewController,这是我不想要的,而且FirstViewController已经创建好了。那么我如何在updateAllUI()中调用所有其他控制器的updateUI()


请帮忙,谢谢

去掉括号。调用类函数时不使用它们

FirstViewController.updateUI()

也就是说。。至少可以说,你想做的事情很奇怪。您不应该使用类函数来修改类实例的属性。如果两个视图控制器同时出现在屏幕上,则应使用父控制器命令它们在需要时更新其UI


如果它们不是同时出现在屏幕上,您实际上不需要同时更新两个ui。

如果您希望所有视图控制器对其中一个视图控制器中的操作做出反应[在本例中-更新ui],请尝试发布通知。。这就是在iOS中广播消息的方式

当所需操作完成时,可以从视图控制器发布通知。 所有其他视图控制器都将订阅该通知,并在该通知发布时通过更新其UI对其作出反应

下面的帖子快速展示了发布/观察通知的示例。。


也可能有帮助

让视图控制器直接通信通常是一种非常糟糕的做法。我将使用
NSNotification
在视图控制器之间进行通信。按照惯例,通知的名称以大写字母开头,以“通知”一词结尾

class FirstViewController: UIViewController {
    func updateUI {...}  

    override func viewDidLoad() {
        super.viewDidLoad()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateUI", name:"TimeToUpdateTheUINotificaiton", object: nil)
    }

    override deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
}
}

class SecondViewController: UIViewController {
    func updateUI {...}  

    override func viewDidLoad() {
        super.viewDidLoad()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateUI", name:"TimeToUpdateTheUINotificaiton", object: nil)
    }

    override deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
}



class ThirdViewController: UIViewController{

    func updateAllUI {
        NSNotificationCenter.defaultCenter().postNotificationName("TimeToUpdateTheUINotificaiton", object: nil)
    }
}