Show/Hide 另一个控制器中的 UIButton

Show/Hide UIButton in another controller

我的 ViewController.swift 中有一个按钮:

@IBOutlet weak var exampleButton: UIButton!

我想 show/hide AppDelegate 的那个按钮,当特定的事情发生时(即应用程序进入后台等)。 我该怎么做?

一种方法可以是 - 您可以为此使用通知

在需要隐藏按钮的视图控制器中添加 Observer

NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: "hideButton",
    name: @"HIDE_BUTTON_NOTIFICATION",
    object: nil)



func hideButton() -> Void {
  // Hide your button here
  // Remember to hide on main thread
}

从任何你想隐藏按钮的地方(比如从AppDelegate),你可以post这个通知

 NSNotificationCenter.defaultCenter().postNotificationName(@"HIDE_BUTTON_NOTIFICATION", object: nil)

与其让另一个对象直接操作它,不如使用通知来指示状态更改。状态决定按钮是否出现。

确保在您的通知侦听器中您只触摸主线程上的按钮。

通知是个好主意,但如果您的 ViewController 不是您的初始 ViewController,或者尚未初始化怎么办?它将无法捕获此通知。扩展到其他答案的可能解决方案(可能不优雅)是提供一个标志。您的 ViewController 将对其进行检查,例如在 viewDidLoad()。您的标志可以存储在一个单例对象中,该对象将捕获来自 AppDelegate 的通知。

总而言之,您应该在 ViewController 中添加通知观察器,以捕获来自 AppDelegate 的事件。 (就像其他答案一样)

创建单例class 以存储适当的信息。 检查 viewDidLoad 中的条件:

if YOUR_SINGLETON.YOUR_FLAG == true {
     showButton()
} else {
     hideButton()
}

别忘了在您的单例中也添加通知观察器 class。