🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
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

解決済

2回答

2516閲覧

UIButtonを押下した時に、自身の表示しているテキストを変更したい。

beginner_kaito

総合スコア16

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グッド

0クリップ

投稿2021/03/01 07:05

iOSアプリを制作中です。
とある画面に、 最初に「実行」というテキストが表示されるUIButtonを設置しており、そのボタンを押した時にボタンの表示しているテキストを「完了」という風に変えたいのですが、なぜか上手く変更することができません。
以下がテキストを変える時に試したコードです。

Swift

1//失敗しました 2@IBAction func pushButton(_ sender: UIButton) { 3 sender.setTitle("完了", for: .normal) 4} 5

Swift

1//失敗しました 2@IBOutlet weak var Button: UIButton! 3 4@IBAction func pushButton(_ sender: UIButton) { 5 Button.setTitle("完了", for: .normal) 6} 7

Swift

1//失敗しました 2@IBOutlet weak var Button: UIButton! 3 4@IBAction func pushButton(_ sender: Any) { 5 Button.setTitle("完了", for: .normal) 6}

Swift

1//失敗しました 2@IBOutlet weak var Button: UIButton! 3 4@IBAction func pushButton(_ sender: Any) { 5 Button.setTitle("完了", for: .normal) 6}

Swift

1//失敗しました 2@IBOutlet weak var Button: UIButton! 3 4@IBAction func pushButton(_ sender: Any) { 5 Button.titleLabel?.text = "完了" 6}

Swift

1//失敗しました 2@IBAction func pushButton(_ sender: UIButton) { 3 sender.titleLabel?.text = "完了" 4} 5

色々な書き方を試してみましたが、どれも望む通りの結果を得ることができませんでした。
どのように書けば、UIButtonの自身のテキストを変更することができるでしょうか。
ご教示いただけると助かります。

開発環境は以下のようになっています。

OS macOS Catalina
Xcode Version1 2.4
Swift 5.3.2
使用しているシミュレーター iPad Air
iOS 14.4
UIKitで開発しています。

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

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

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

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

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

hoshi-takanori

2021/03/01 08:26

それでいけるはずですけど…。そのメソッドは呼ばれてますか? Storyboard での接続をご確認ください。
beginner_kaito

2021/03/01 08:44

print("押された")と全ての処理の中に書いており出力を確認できていますので、ストーリーボードとの接続は問題ないと考えています。
guest

回答2

0

ベストアンサー

もしかして、ですが、
UIButtonの設定を Plainではなく、Attributed に設定しているというオチはないでしょうか。

イメージ説明

このような設定をしているのであれば、setTitleで変更することはできません。

Swift

1 @IBAction func button(_ sender: UIButton) { 2 let newTitle = NSAttributedString(string: "pushed") 3 button.setAttributedTitle(newTitle, for: .normal) 4 }

このような感じで setAttributedTitleメソッドを使う必要がああります。

Swift

1 @IBAction func button(_ sender: UIButton) { 2 let textAttributes: [NSAttributedString.Key : Any] = [ 3 .font : UIFont.systemFont(ofSize: 24.0), 4 .foregroundColor : UIColor.green, 5 .strokeColor : UIColor.red, 6 .strokeWidth : -3.0 7 ] 8 9 let newTitle = NSAttributedString(string: "pushed", attributes: textAttributes) 10 11 button.setAttributedTitle(newTitle, for: .normal) 12 }

こんな感じで装飾を変えることももちろん可能です。
上記の装飾については

を参考に、一部 Swift5 に合うように変更しています。

NSAttributedString については Objc 時代の記事も多く、新しいものが少ない印象ですが、キーなどはあまり変わらないと思いますし、変わっていても Xcode がいい感じに代案を出してくれますので、それほど困らないかと思います。

投稿2021/03/03 00:31

TsukubaDepot

総合スコア5086

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

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

beginner_kaito

2021/03/15 00:42

教えてくださりありがとうございます! 確かにUIButtonの設定をAttributeにしていました。 教えてくださったコードの通りに書いたところ、無事自分が実現したい動きをすることができました!
guest

0

おそらく、「@IBOutlet」と「@IBAction」でstoryboardとの接続が失敗しているのでは?

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 let button = UIButton(frame: CGRect(x: 64, y: 64, width: 64, height: 64)) 5 button.setTitle("実行", for: .normal) 6 button.setTitleColor(.black, for: .normal) 7 button.addTarget(self, action: #selector(buttonTouchUpInside(_:)), for: .touchUpInside) 8 // self = UIViewController 9 self.view.addSubview(button) 10} 11 12@objc func buttonTouchUpInside(_ sender: UIButton) { 13 sender.setTitle("完了", for: .normal) 14 sender.setTitleColor(.red, for: .normal) 15}

投稿2021/03/01 08:26

Ranford

総合スコア64

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問