如何在 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.normalUIControlState.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

Swift:在 UIButton 类中设置宽度和高度

从数组中设置自定义单元格 uibutton 标题 - Swift

在自定义表格视图单元格中设置 UIButton 的高度

如何在 UITableViewCell 中设置 UIButton 状态?

如何在 Swift 3 中设置状态栏样式