我的ViewController.swift中有一个按钮:
@IBOutlet weak var exampleButton: UIButton!
我想在AppDelegate中显示/隐藏该按钮,当某些特定事件发生时(即应用程序进入后台等)。 我怎么能这样做?
答案 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()
}
不要忘记在你的单身人士课程中添加通知观察者。