UIButton不在两个图像之间切换Swift 4.2
Posted
技术标签:
【中文标题】UIButton不在两个图像之间切换Swift 4.2【英文标题】:UIButton not toggling between two images Swift 4.2 【发布时间】:2019-03-21 04:34:16 【问题描述】:我想为我的应用添加声音。我添加了一个带有两个图像的 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() 并对其进行了修复。
【问题讨论】:
你在哪里称呼这个soundButton()
看起来 soundButton() 每次打开声音设置时都会被调用,所以当你第一次打开声音设置时它工作正常,但当你再次打开它时,它会向 soundView 添加新的声音按钮跨度>
似乎每次显示系统声音视图时都会创建声音按钮。
向我们展示切换方法以及调用 soundButton() 的位置? @anbu 的问题很好。
@Anbu,就是这样。我在拼图启动时隐藏了 UIView 上的按钮。当用户按下“声音设置”图标时,声音设置 UIView 被取消隐藏。我有这个功能上的按钮来取消隐藏声音设置。我将其移至 viewDidLoad() 并对其进行了修复。请把它作为答案,我会接受的。
【参考方案1】:
我建议您定义一个布尔变量来保持按钮的当前状态。然后,您应该根据变量的当前状态设置按钮的当前图像。
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()
【讨论】:
在 swift 4.2 isSoundOn = !isSoundOn 可以替换为 isSoundOn.toggle() 为.selected
和.normal
预设图像(一次)并用isSelected
更改它们是非常标准的做法。
谢谢大家。我已经尝试了上述两种方法,结果相同。该按钮在 viewDidLoad() 中加载。图像仍然切换,但在彼此之上,而不是相互替换。这就是如此奇怪。 Swift 4.2,也许我需要在显示第二张图片之前删除一张图片?
我知道这是一种众所周知的做法,但是我建议替换按钮的当前图像,因为@DavidSanford 说它覆盖了图像而不是替换它。您可能有另一个与您未在此处显示的代码相关的问题,因为我已经尝试过并且没有看到与上面的代码相同的问题。以上是关于UIButton不在两个图像之间切换Swift 4.2的主要内容,如果未能解决你的问题,请参考以下文章
可重复使用的表格视图单元格中的 UIButton 图像切换问题