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

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

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

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

Q&A

解決済

1回答

2262閲覧

swift ボタンを押したらボタンの色を変更したい

ataru2222

総合スコア272

Swift

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

0グッド

0クリップ

投稿2023/01/23 14:22

実現したいこと

ボタンを押したらボタンの色を変更したい

発生している問題・エラーメッセージ

ボタンをチェックボックスのように使って
未ならグレー、済ならブルーのようなボタンを設定しようとしているのですが、ボタンのタイトルとタイトルの色はこちらのコードで変更できるのですが、ボタン自体の色はbackgroundColorで変更できない状況です。

該当のソースコード

swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 btn1.addTarget(self, action: #selector(btnChange), for: .touchUpInside) 4} 5 6@objc func btnChange(sender: UIButton, forEvent: UIEvent) { 7 8 if sender.titleLabel?.text == "未" { 9 sender.setTitle("済", for: .normal) 10 sender.backgroundColor = UIColor.systemBlue 11 sender.setTitleColor(UIColor.systemPink, for: .normal) 12 } else { 13 sender.setTitle("未", for: .normal) 14 sender.backgroundColor = UIColor.systemGray 15 sender.setTitleColor(UIColor.white, for: .normal) 16 } 17 18 }

試したこと

UIColorの部分を調べた書き方で書いてみるもうまくいかず。

こちらについてボタンの色を変更することは可能でしょうか?
詳しい方いらっしゃいましたらご教授ください。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Xcode13以降、UIButtonには新しい設定方法( UIButton.Configuration )が追加されており、Xcode13以降のStoryboardで新しくUIButtonを貼り付けると、新しい設定方法を使用したボタンが貼り付けられます。

新しい設定方法が使用されたUIButtonは、StoryboardのUIButtonの設定でStyleの項目が「Plain」「Gray」「Tinted」「Filled」のいずれかになっています。ここのStyleの設定を「Default」にすると、従来通りの設定方法が使えるようになるので、多くのWebサイトで開設されている通りbackgroundColorを変更する方法で背景色を変えることができます。

Styleの設定を「Gray」「Tinted」「Filled」にした場合は、 UIButton.Configuration の設定による背景色が優先されるため、backgroundColorを変更する方法では背景色は変わりません。この場合、configurationで設定する必要があります。また、新しい設定方法を使用する時は、背景色だけなくタイトル文字や文字色についても統一してconfigurationで設定することをお勧めします。

例えば、Styleの設定を「Default」にした場合は、次のようにしてタイトル文字、文字色、背景色を変更できますが、

swift

1sender.setTitle("済", for: .normal) 2sender.setTitleColor(.systemPink, for: .normal) 3sender.backgroundColor = .systemBlue

Styleの設定を「Gray」「Tinted」「Filled」にした場合は、次のようにしてタイトル文字、文字色、背景色を変更します。

swift

1sender.configuration?.title = "済" 2sender.configuration?.baseForegroundColor = .systemPink 3sender.configuration?.baseBackgroundColor = .systemBlue

投稿2023/01/28 06:58

TakeOne

総合スコア6299

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

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

ataru2222

2023/01/29 12:52

TakeOne様 そのようなXcode上の変更があったのですね。 とても勉強になりました。 ありきたりなのに動かないコードがあったら、今回のような可能性も視野に入れて特定できるように精進していきます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問