質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

0回答

185閲覧

swift3でボタンの画像を変更したい。

afuroda

総合スコア36

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2017/09/18 12:29

###前提・実現したいこと
swift3でボタンを押した時にボタンの画像をランダムに変更したいのですが、画像が切り替わりません。
どなたか解決方法を教えてください。
number1btnを押すごとに、btnsampleの画像を切り替えたいです。

###該当のソースコード

swift

1import Foundation 2import UIKit 3 4class SecondViewController: UIViewController { 5 var array:[UIImage]=[] 6 var array2:[Int]=[] 7 8 9 let BTN_1=0 10 let BTN_2=1 11 12 13 var gazonum=0 14 15 16 var number1btn=UIButton() 17 var btnsample=UIButton() 18 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 23 24 for var z in 0..<52{ 25 array2.append(z+1) 26 } 27 28 29 for var u in 0..<array2.count{ 30 var a=Int(arc4random_uniform(UInt32(array2.count))) 31 print(a) 32 a=array2.remove(at: a) 33 array.append(UIImage(named: "\(a).png")!) 34 35 36 } 37 38 39 40 41// ボタン1 42 let number1btn=makeButton(frame: CGRect(x:200,y:400,width:53.3,height:80), image: UIImage(named: "number1.png")!,tag: BTN_1) 43 44 self.view.addSubview(number1btn) 45 46//ボタンサンプル 47 let btnsample=makeButton2(frame: CGRect(x:100,y:400,width:53.3,height:80), tag: BTN_2) 48 btnsample.setImage(UIImage(named: "z01.png")!, for: .normal) 49 50 51 self.view.addSubview(btnsample) 52 53} 54 55func makeButton(frame:CGRect,image:UIImage,tag:Int)->UIButton{ 56 let button=UIButton(type: UIButtonType.custom) 57 button.frame=frame 58 button.setImage(image, for: .normal) 59 button.tag=tag 60 button.addTarget(self, action: #selector(onClick(sender:)), for: .touchUpInside) 61 return button 62 63} 64 65 func makeButton2(frame:CGRect,tag:Int)->UIButton{ 66 let button=UIButton(type: UIButtonType.custom) 67 button.frame=frame 68 button.tag=tag 69 button.addTarget(self, action: #selector(onClick(sender:)), for: .touchUpInside) 70 return button 71 72 } 73 74 75func onClick(sender:UIButton){ 76 btnsample.setImage(nil, for: .normal) 77 78 if sender.tag == BTN_1 { 79 80 81 gazonum+=1 82 83 btnsample.setImage(array[gazonum], for: .normal) 84 85 self.view.addSubview(btnsample) 86 87 } 88 if sender.tag == BTN_2 { 89 } 90 91} 92 93

###試したこと
btnsample.setImage(nil, for: .normal)を追加してみたのですがそれも成功しませんでした。
ボタンの生成をonClick内で行うと画像は切り替わったのですが、onClickを行わないとボタンが生成されません。
初めからボタンを生成し表示し、押せる状態からボタンの画像を切り替えたいです。

わかりにくくてすいません。

###補足情報(言語/FW/ツール等のバージョンなど)
swift3を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aja

2017/09/19 09:59

コードが分かりにくいです、もっとsimpleにできると思います.randomに変更することとボタンの画像を変えることはまず分けて考えてみてはどうでしょう
YokemuraTakeshi

2017/09/20 06:28

btnsampleの画像にいちどnilをセットしているのとその後addSubViewし直しているのが無駄な以外はそんなに変ではないように見えます。 UIImage生成時に ! 指定してるので画像名が違っている等の問題でもなさそうですね。 確認するところとしては、sender.tag == BTN_1 の判定に入っているか、くらいでしょうか。
t_obara

2017/09/20 10:04

touchUpInside だからでは?押した時ですよね?離した時ではなく。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問