首页 > 解决方案 > UIButton不在两个图像之间切换Swift 4.2

问题描述

我想在我的应用程序中添加声音。我添加了一个带有两个图像的 UIButton,soundON 和 soundOFF。当我第一次在应用程序中调用声音设置时,它们会随着每张图像而正常切换。但是,当我第二次及以后返回声音设置时,就像显示 soundOn 图像时 soundOff 图像并没有消失一样。奇怪的是代码是如此简短和简单。

func soundButton() {
    sounds = UIButton(frame : CGRect(x: 65, y: 70, width: 40, height:40))
    sounds.setImage(UIImage(named : "soundON"), for : .normal)
    sounds.setImage(UIImage(named : "soundOFF"), for : .selected)
    sounds.showsTouchWhenHighlighted = true
    sounds.addTarget(self, action: #selector(soundButtonTapped), for: .touchUpInside)
    self.soundView.addSubview(sounds)
}

@objc func soundButtonTapped(_ sender: Any) {
    sounds.isSelected.toggle()
    isSoundOn.toggle()
}

我添加了一个视频来显示这个问题,因为这将节省大量的打字时间。

http://www.reeflifeapps.com/soundError.mov

任何帮助是极大的赞赏。

更新:我在拼图启动时隐藏了 UIView 上的按钮。当用户按下“声音设置”图标时,声音设置 UIView 被取消隐藏。我有这个功能上的按钮来取消隐藏声音设置。我将其移至 viewDidLoad() 并对其进行了修复。

标签: iosswiftuibutton

解决方案


我建议您定义一个布尔变量来保持按钮的当前状态。然后,您应该根据变量的当前状态设置按钮的当前图像。

var isSoundOn = false

@objc func soundButtonTapped(_ sender: Any) {
    isSoundOn.toggle()
    if isSoundOn {
        // your logic when sound on (set button selected image, action etc)
    } else {
        // logic when sound off (set button not selected image, action etc)
    }
}

如果您仍想soundButton.isSelected用作布尔变量,请不要为不同的状态定义图像,soundButton.setImage(yourImage, for: .selected)并按soundButton.setImage(yourImage, for: .normal)如下方式定义它们:

soundButton.setImage(soundButton.isSelected ? soundOnImage : soundOffImage, for: .normal)

可以使用上述两种方法之一。

更新:

正如 Lloyd Kaijzer 所说,isSoundOn = !isSoundOn更新为isSoundOn.toggle()


推荐阅读