Comment définir l'image de UIButton dans Swift 3?

À l'origine, mon code fonctionnait.

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

Ces deux morceaux de code qui définissent l'image fonctionnaient. Ces buttons n'ont rien mis à leur image. Quand on clique dessus, je veux qu'ils passent à ces images. Ces images sont dans le dossier avec le controller de vue. Je ne sais pas pourquoi ils ont cessé de travailler. J'ai commenté tous les autres codes pour voir si cela pourrait être un problème, mais cela ne semble pas être le cas. Les instructions d'printing sont imprimées dans les deux cas. C'est juste l'image définie qui ne semble rien faire. Il n'y a pas d'erreur, ça ne fait rien.

Je ne comprends pas vraiment le code UIControlState (). J'imite un projet en ligne qui a le même code et ça marche. C'est vraiment étrange. S'il vous plaît laissez-moi savoir si vous avez des suggestions!

IBAction func clickedon (_ expéditeur: 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 } } 

Vous pouvez essayer ceci:

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

J'essaie d'utiliser d'autres appels setImage mais ne fonctionne pas. J'ai trouvé ce setBackgroundImage pour laisser l'image apparaître. J'espère que cela vous aidera.

Dans votre code, UIControlState () peut être remplacé par UIControlState.normal ou 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 } } 

Es-tu en train de forcer une contrainte de largeur et de hauteur? Si ce n'est pas le cas, vos buttons peuvent être dégénérés car ils n'ont pas d'image à l'intérieur d'eux. Vous pouvez également définir le cadre lorsque vous définissez l'image; Je préférerais autolayout.

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

J'ai compris la réponse. Le UIControlState.normal fonctionne, le problème était que les buttons étaient placés en dessous de ma carte. Cela signifiait que je pouvais cliquer dessus mais ils n'apparaissaient pas.

Il explique pourquoi les instructions d'printing et tout a fonctionné sans erreur. Je vous remercie!

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

Lorsque vous voulez changer l'image du button sur Swift 3, vous pouvez essayer ma solution, croire avec moi parce que je l'ai essayé et le succès. Merci