ios – 调用UIButton.isHidden = true / false时未更新View

我使用 xcode 8.2和 swift来制作一个简单的应用程序.

我使用Interface Builder在我的View中添加一个UIButton.

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

@IBOutlet weak var myBtn: UIButton!

我希望这个按钮在开始时隐藏,所以在viewDidLoad我设置的是隐藏.像这样:

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.

解决方法

在onMessageCallback块中

替换以下行

self.showHideSeatButtons()

dispatchQueue.main.async {
    self.showHideSeatButtons()
}

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

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...