如何在 Swift 3 中设置 UIButton 的图像?
Posted
技术标签:
【中文标题】如何在 Swift 3 中设置 UIButton 的图像?【英文标题】:How to set image of UIButton in Swift 3? 【发布时间】:2016-10-28 01:50:48 【问题描述】:最初,我的代码可以运行。
IBAction func clickedon(_ sender: UIButton)
if(gamestate[sender.tag] == 0 && gameisactive == true)
gamestate[sender.tag] = activeplayer
if (activeplayer == 1)
print("working")
sender.setImage(UIImage(named:"Cross.png"), for: UIControlState()) <-----------
activeplayer = 2
else
print("working2")
sender.setImage(UIImage(named:"Nought.png"), for: UIControlState()) <-----------
activeplayer = 1
这两段设置图像的代码正在工作。这些按钮的图像没有设置任何内容。当他们被点击时,我希望他们切换到那些图像。这些图像位于视图控制器所在的文件夹中。我不确定他们为什么停止工作。我注释掉了所有其他代码,看看它是否可能是一个问题,但似乎不是。在这两种情况下,打印语句都会被打印出来。它只是似乎没有做任何事情的设置图像。没有错误,它什么也不做。
我不太了解 UIControlState() 代码。我正在模仿一个具有相同代码并且可以工作的在线项目。这真的很奇怪。如果您有任何建议,请告诉我!
【问题讨论】:
你的语法看起来是正确的,除了 Joey 指出的。那时我可能会建议“分解”这些行 - 如果您单独声明 UIImages,问题可能会暴露出来。我知道,一切正常,但问题可能出在其他地方。在这一点上,我什至会尝试将按钮的类型从系统更改为自定义,反之亦然。 请发布需求图片以及您在代码中实现的目标,然后其他人可以帮助您 【参考方案1】:IBAction func clickedon(_ sender: UIButton)
if(gamestate[sender.tag] == 0 && gameisactive == true)
gamestate[sender.tag] = activeplayer
if (activeplayer == 1)
print("working")
sender.setImage(UIImage(named: "Cross.png")!, forState: UIControlState.Normal)
sender.setImage(UIImage(named:"CrossSelected.png")!, forState: UIControlState.Selected)
activeplayer = 2
else
print("working2")
sender.setImage(UIImage(named: "Nought.png")!, forState: UIControlState.Normal)
sender.setImage(UIImage(named:"NoughtSelected.png")!, forState: UIControlState.Selected)
activeplayer = 1
【讨论】:
【参考方案2】:你可以试试这个:
let image = UIImage(named: "imagename.png")
yourButton.setBackgroundImage(image, for: .normal)
我尝试使用其他 setImage 调用但不工作。我发现这个 setBackgroundImage 让图像出现。希望对你有帮助。
【讨论】:
【参考方案3】:在您的代码中,UIControlState() 可以替换为
UIControlState.normal
或 UIControlState.highlighted
。
https://developer.apple.com/reference/uikit/uicontrolstate
IBAction func clickedon(_ sender: UIButton)
if(gamestate[sender.tag] == 0 && gameisactive == true)
gamestate[sender.tag] = activeplayer
if (activeplayer == 1)
print("working")
sender.setImage(UIImage(named:"Cross.png"), for: UIControlState.normal)
sender.setImage(UIImage(named:"Cross_highlighted.png"), for: UIControlState.highlighted)
activeplayer = 2
else
print("working2")
sender.setImage(UIImage(named:"Nought.png"), for: UIControlState.normal)
sender.setImage(UIImage(named:"Nought_highlighted.png"), for: UIControlState.highlighted)
activeplayer = 1
【讨论】:
谢谢,我试过了,但它似乎不起作用。我会尝试查看参考。【参考方案4】:您是否强制限制宽度和高度?如果不是,您的按钮可能会退化,因为它们内部没有图像。设置图片的时候也可以设置边框;我更喜欢自动布局。
UIImage(named:"Cross.png")!
sender.setImage(image, for: .normal)
sender.frame.size = image.size
【讨论】:
【参考方案5】:我想出了答案。 UIControlState.normal 有效,问题是按钮实际上放在我的板下方。这意味着我可以点击它们但它们不会出现。
它解释了为什么打印语句和一切工作都没有错误。谢谢!
【讨论】:
【参考方案6】:self.button.setImage(UIImage(named: "namebutton"), for: .normal)
当您想更改 swift 3 上按钮的图像时,您可以尝试我的解决方案,相信我,因为我尝试过并且成功了。谢谢
【讨论】:
以上是关于如何在 Swift 3 中设置 UIButton 的图像?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中设置 UIButton 图像 - 当前解包为 nil
从数组中设置自定义单元格 uibutton 标题 - Swift