如何在Swift 3中设置UIButton的图像?

5

最初,我的代码是正常工作的。

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,问题就会暴露出来。我知道,事情一直在工作,但也许问题在其他地方。此时我甚至会尝试将按钮类型从System更改为Custom或反之亦然。 - user7014451
请发布您的需求和代码实现截图,这样其他人才能帮助您。 - Vinodh
6个回答

4

当点击UIButton时,执行IBAction函数:

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

} 
}

3
你可以试试这个:
let image = UIImage(named: "imagename.png")
yourButton.setBackgroundImage(image, for: .normal)

我尝试使用其他的setImage调用,但不起作用。我发现可以使用setBackgroundImage来让图片显示。希望这能帮到你。


1
在您的代码中,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

    } 
}

谢谢,我尝试了,但似乎不起作用。我会尝试查看参考资料。 - Aditya Yadav

0

我找到了答案。UIControlState.normal是有效的,问题在于按钮实际上被放置在我的面板下方。这意味着我可以点击它们,但它们不会出现。

这解释了为什么打印语句和所有内容都没有错误。谢谢!


0
self.button.setImage(UIImage(named: "namebutton"), for: .normal)

当你想在Swift 3中更改按钮图像时,你可以尝试我的解决方案,相信我,因为我已经尝试过并且成功了。谢谢。


0

你是否强制设置了宽度和高度的限制?如果没有,在按钮内部没有图像的情况下,它们可能会退化。你也可以在设置图像时设置框架;我更喜欢自动布局。

  UIImage(named:"Cross.png")!
  sender.setImage(image, for: .normal)
  sender.frame.size = image.size

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接