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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

349閲覧

Swift For内のUIButtonの値を変更したい

soujomitsuura

総合スコア24

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2018/01/18 18:21

編集2018/01/18 18:34

こんにちは
何回かに分けて質問しましたが、とうとうわかりませんでしたので希望をそのまま質問します。

行いたいことはfor文で生成した複数のUIButtonに対し、touchupinsideアクションをつけますが、タップした要素以外のUIButtonにも別な値変更を実行させたいのです。

なんとなくできそうなのにできないというところで行き詰まってます。

教えてください。

よろしくお願いします。

swift

1 2class LgBtn:UIButton { 3 var indexNumber:String? 4 var labelColor = UIColor(red: 142/255, green: 142/255, blue: 147/255, alpha: 0.9)//①始めはこの部分を動的に変更し、 5} 6 7class Archive: UIView{ 8 func archiveHeadSetup(){ 9 10 let langArray = [ 11 "Drive", 12 "Boxing", 13 "Grass", 14 "Muscle", 15 "Shake hand", 16 "Milk shake" 17 ] as [Any] 18 19 var horizontalPosition: CGFloat = 5 20 21 for (_, title) in langArray.enumerated() { 22 let lgBtn = UIButton() 23 lgBtn.setTitle("(title)", for:UIControlState.normal) 24 lgBtn.sizeToFit() 25 lgBtn.frame.origin = CGPoint(x: horizontalPosition, y: 28) 26 self.view.addSubview(lgBtn) 27 lgBtn.addTarget(self, 28 action: #selector(self.buttonTapped(sender:)), 29 for: .touchUpInside) 30 } 31 32 } 33 34 @objc func buttonTapped(sender : UIButton) { 35 let lgBtn = LgBtn() 36 lgBtn.labelColor = UIColor.red 37 lgBtn.setTitleColor(UIColor.red, for: .normal) 38 //それ以外への効果(この一行が違うので直したい) 39 //②再登録すればカラーが変更されると思っていたがされなかった。 40 sender.setTitleColor(UIColor.red, for: .normal) 41 //クリック自身への効果 42 //③自身に対するカラーは変更された。 43 } 44}

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

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

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

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

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

guest

回答1

0

ベストアンサー

buttonTapped(sender:)の中のlet lgBtn = LgBtn()は新しいボタンを生成しているので、archiveHeadSetup()の中で生成しているボタンとは関係ないです。
archiveHeadSetup()の中で生成したボタンを配列などに保存いておかないといけません。

もしくは、self.view.subviewsにaddSubViewしたViewが保存されていますので、そこから該当するボタンを拾い出してもかまいません。

投稿2018/01/19 00:59

fuzzball

総合スコア16731

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

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

soujomitsuura

2018/01/19 04:34

回答ありがとうございます。 配列に保存の役割を担えることを初めて知りました。 具体的には下記のようにして解決しました。 //変数で配列作成 var buttonArray: [UIButton] = [] //配列から取得した値を変数にして let langButton : UIButton = buttonArray[1] //編集 langButton.setTitle("Hey dude", for:UIControlState.normal) これで動的に変更させることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問