我正在使用xcode 8.2
和swift
制作一个简单的应用程序。
我使用UIButton
在我的视图中添加了Interface Builder
。
我已为按钮添加了适当的插座:
@IBOutlet weak var myBtn: UIButton!
我希望此按钮在开始时隐藏,因此viewDidLoad
我设置的是Hidden
。像这样:
override func viewDidLoad() {
super.viewDidLoad()
...
myBtn.isHidden = true
...
mqttConfig = MQTTConfig(clientId: "iphone7", host: "192.xx.xx.150", port: 18xx, keepAlive: 60)
mqttConfig.onMessageCallback = { mqttMessage in
if ( mqttMessage.topic == "status" ) {
if ( mqttMessage.payloadString?.localizedStandardContains("show") )! {
self.showButton = true
} else if ( mqttMessage.payloadString?.localizedStandardContains("hide") )! {
self.showButton = false
}
self.showHideSeatButtons()
} else {
// something to do in case of other topics
}
}
稍后在代码中我有一个显示/隐藏此按钮的功能。
func showHideButton(){
if ( self.showButton ) {
print("button enabled!")
myBtn.isHidden = false
} else {
print("button disabled!")
myBtn.isHidden = true
}
}
当我调用此功能时(通过使用MQTT接收某个消息)我得到了打印输出,但我没有看到按钮。 如果按下我知道按钮的位置,则会显示按钮。
知道这里会发生什么吗?我现在花了一小时用谷歌搜索这个!请不要建议object-c
解决此问题的方法,因为我不知道object-c
。
答案 0 :(得分:4)
由于您正在调用某个服务,因此您可能无法在同一个线程中工作。试试这个:
func showHideButton(){
DispatchQueue.main.async {
if (self.showButton ) {
print("button enabled!")
self.myBtn.isHidden = false
} else {
print("button disabled!")
self.myBtn.isHidden = true
}
}
}
答案 1 :(得分:4)
在onMessageCallback块中
替换以下行
self.showHideSeatButtons()
带
DispatchQueue.main.async {
self.showHideSeatButtons()
}
注意:与UI相关的更改/更新必须由主队列(线程)处理。