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

最初,我的代码正在运行。

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()代码。 我正在模仿一个具有相同代码并且有效的在线项目。 真的很奇怪。 如果您有任何建议,请告诉我!

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 } } 

你可以试试这个:

 let image = UIImage(named: "imagename.png") yourButton.setBackgroundImage(image, for: .normal) 

我尝试使用其他setImage调用但不工作。 我发现这个setBackgroundImage让图像出现。 希望它能帮到你。

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

你强迫宽度和高度约束? 如果不是,您的按钮可能会退化,因为它们内部没有图像。 您也可以在设置图像时设置框架; 我更喜欢自动布局。

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

我想出了答案。 UIControlState.normal工作,问题是按钮实际上放在我的板下面。 这意味着我可以点击它们但它们不会出现。

它解释了为什么打印语句和所有内容都能正常运行。 谢谢!

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

当你想改变swift 3上按钮的图像时,你可以尝试我的解决方案,相信我,因为我尝试了它并取得了成功。 谢谢