在另一个控制器中显示/隐藏UIButton

时间:2015-10-28 11:51:47

标签: ios swift uibutton appdelegate

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

@IBOutlet weak var exampleButton: UIButton!

我想在AppDelegate中显示/隐藏该按钮,当某些特定事件发生时(即应用程序进入后台等)。 我怎么能这样做?

3 个答案:

答案 0 :(得分:11)

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

在视图控制器中添加观察者,其中需要隐藏按钮

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),您都可以发布此通知

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

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

不要忘记在你的单身人士课程中添加通知观察者。