web-dev-qa-db-fra.com

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 boutons n'ont rien défini à leur image. Quand on clique dessus, je veux qu’ils basculent sur ces images. Ces images sont dans le dossier avec le contrôleur de vue. Je ne sais pas pourquoi ils ont cessé de travailler. J'ai commenté tous les autres codes pour voir si cela pouvait être un problème, mais cela ne semble pas être le cas. Les déclarations d'impression 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, cela ne fait rien.

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

4
Aditya Yadav

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

} 
}
4
Himali Shah

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 laisser l'image apparaître. J'espère que ça vous aidera.

3
Syafiq Sinwan

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

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

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

0
Ace

Est-ce que vous forcez une contrainte de largeur et de hauteur? Si ce n'est pas le cas, vos boutons peuvent être dégénérés, car ils ne contiennent aucune image. Vous pouvez également définir le cadre lorsque vous définissez l'image; Je préférerais l'autolayout.

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

J'ai compris la réponse. Le UIControlState.normal fonctionne, le problème était que les boutons étaient réellement placés sous ma carte. Cela signifiait que je pouvais cliquer dessus mais qu'ils n'apparaissent pas. 

Cela explique pourquoi les déclarations imprimées et tout fonctionnaient sans erreur. Je vous remercie!

0
Aditya Yadav