当另一个元素(在这种情况下为蓝牙)的状态发生变化时,如何更改@IBAction按钮的图像?

时间:2019-02-26 10:53:22

标签: ios swift uibutton

我有一个小应用程序,可以连接到蓝牙外围设备并对其进行配置。所有的蓝牙部分都工作正常,但是我正在努力根据连接状态设置与@IBAction关联的图像。如果连接了蓝牙设备,我想显示要发送的图像,如果不是,则要扫描图像。

当中央管理器获得 didDisconnectPeripheral 状态更改时,使用 setNeedsDisplay()方法,我可以更改与按钮关联的图像,但是它仅在按钮后更新接下来被触摸(与 .normal 状态的图像相同)。

有没有一种方法可以强制以编程方式编写按钮而无需重新加载图像?这是在按下图像后设置图像的代码:

    var stateImage = UIImage(named: "send")

@IBAction func btoothConf(sender: UIButton) {
    sender.setImage(stateImage, for: .normal)

    if (peripheral != nil) && (peripheral.state == .connected) {
        sendCmd(command, peripheral!, writeChar)
    } else {
        self.scan()
    }
}

1 个答案:

答案 0 :(得分:0)

好的,通过执行以下操作,我设法获得了所需的功能,但这似乎有点麻烦。

  1. 添加了 @IBOutlet弱连接状态:UIButton!,并将其链接到同一按钮。
  2. 蓝牙函数中包含的
  3. self.connectionState.setImage(stateImage,for:.normal)。连接和断开连接过渡为 stateImage 变量定义了不同的图像。

它可以工作,但是我认为应该有一种更简单的方法,因为我可以在单击按钮后(或者仅在背景图像之前)设置图像。