调用UIButton.isHidden = true / false时视图未更新

the*_*lse 7 xcode objective-c uibutton ios swift

我正在使用xcode 8.2swift制作一个简单的应用程序。

我已UIButton使用将新增至Interface Builder

我为按钮添加了适当的插座:

@IBOutlet weak var myBtn: UIButton!
Run Code Online (Sandbox Code Playgroud)

我希望此按钮在启动时被隐藏,因此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
            }
        }
Run Code Online (Sandbox Code Playgroud)

在代码的后面,我有一个显示/隐藏此按钮的功能。

func showHideButton(){
    if ( self.showButton ) {
        print("button enabled!")
        myBtn.isHidden = false

    } else {
        print("button disabled!")
        myBtn.isHidden = true
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用此函数时(通过使用MQTT接收某些消息),我得到了打印输出,但没有看到该按钮。如果按我知道的按钮所在的位置,则会显示该按钮。

知道这里会发生什么吗?我已经花了一个小时搜索这个!object-c我不知道,请不要提出解决此问题的方法object-c

Kru*_*nal 6

在onMessageCallback块中

替换以下行

self.showHideSeatButtons()
Run Code Online (Sandbox Code Playgroud)

DispatchQueue.main.async {
    self.showHideSeatButtons()
}
Run Code Online (Sandbox Code Playgroud)

注意:与UI相关的更改/更新必须由主队列(线程)处理。