2016-10-28 14 views
4

元々、私のコードは機能していました。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 

    } 
    } 

イメージを設定するこれらの2つのコードが機能していました。これらのボタンは何もイメージに設定されていません。クリックすると、それらの画像に切り替える必要があります。これらの画像は、View Controllerのあるフォルダにあります。なぜ彼らが仕事をやめたのか分かりません。私はそれが問題になる可能性があるかどうかを確認するために、他のすべてのコードをコメントしましたが、そうではないようです。どちらの場合も、printステートメントが出力されます。それは、何もしていないような設定イメージです。エラーはなく、何もしません。

私はUIControlState()コードを実際に理解していません。私は同じコードを持つオンラインプロジェクトを模倣しています。それは本当に奇妙です。ご提案があれば教えてください!

+0

あなたの構文は、ジョーイが指摘しているもの以外は正しいように見えます。その時点で、私はこれらの行を "分割"することを提案するかもしれません - UIImagesを別々に宣言すれば問題が公開されるかもしれません。私は、物事は働いていたが、おそらく問題は他の場所にあると知っている。この時点では、ボタンのタイプをシステムからカスタムまたはその逆に変更しようとしていました。 – dfd

+0

要件のイメージを投稿してコードで達成したものを投稿してください。他の人がお手伝いします – Vinodh

答えて

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 

    } 
} 
+0

ありがとう、私はそれを試しましたが、それは動作するようです。私は参照を見てみるよ。 –

0

あなたは幅と高さの制約を強制していますか?そうでない場合、あなたのボタンはそれらの内部に画像がないので縮退する可能性があります。また、画像を設定するときにフレームを設定することもできます。私は自動レイアウトを好むだろう。

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

IBActionのFUNCのclickedon(_差出人: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 

} 
} 
0

私は答えを考え出しました。 UIControlState.normalが動作します。問題はボタンが実際に私のボードの下に置かれたことでした。これは私がまだそれらをクリックすることができなかったことを意味しました。

これは、printステートメントとすべてがエラーなく機能した理由を説明しています。ありがとうございました!

3

あなたはこれを試すことができます:私は他のsetImageの呼び出しを使用しますが動作していないしてみてください

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

。このsetBackgroundImageがイメージを表示するようにしました。それがあなたを助けることを願っています。

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

スイフト3のボタンの画像を変更したいときは、私の解決策を試してみてください。ありがとうございました

関連する問題