プログラムによって迅速にUIButtonのテキストを変更する


222

ここで簡単な質問。UIButton、currencySelectorがあり、プログラムでテキストを変更したい。ここに私が持っているものがあります:

currencySelector.text = "foobar"

Xcodeで「予期された宣言」というエラーが表示されます。何が問題なのですか、またボタンのテキストをどのように変更できますか?

回答:


595

Swift 3、4、5の場合:

button.setTitle("Button Title", for: .normal)

さもないと:

button.setTitle("Button Title", forState: UIControlState.Normal)

また、@IBOutletを宣言する必要がありbuttonます。


32
省略できUIControlStateます。例forState: .Normal
funroll 2015

11
Swift3は.normal小文字に注意してください
Matthew

6
Swift3変更forStatefor
マシューP.ジョーンズ

1
Swift3:self.btnBuy.setTitle( "Buy"、for:UIControlState.normal)
Thiru

5
SWIFT 4のためにもbutton.setTitle("Button Title",for: .normal)!おかげで作業
Rakshitha Murangaロドリゴ

74

SwiftiOSプログラミングの初心者のための説明です。コード行の下:

button.setTitle("myTitle", forState: UIControlState.Normal)

にのみ適用されIBOutlets、には適用されませんIBActions

そのため、アプリがコードを実行する関数としてボタンを使用している場合、たとえば音楽を再生しPlayPauseいて、トグル変数に基づいてタイトルをからに変更したい場合はIBOutlet、そのボタンのも作成する必要があります。

button.setTitleに対して使用しようとするとIBAction、エラーが発生します。それを知ったらそれは明白ですが、初心者(私たち全員がそうでした)にとっては、これは役立つヒントです。


1
ええ、私はあなたの答えを見るまで、まさにこれをググるところだった。ありがとう!+1
Evernoob 2015年

1
それは私が発見するのにしばらくかかったIOSのパターンです。IBOutletが作成されない限り、アクセスできないUIアイテムの属性があります。UIの属性を変更しようとしてアクセスできない場合は、コードを実行しているIBActionと、属性へのアクセスを提供するIBOutletの両方があることを確認してください。
Bendrix

8
この答えは意味がありません。senderアクションのボタンになります。に何でも適用できますsender。これを行うためにコンセントは必要ありません。
rmaddy

2
ベンディックスの回答も彼のコメントも正しくない。彼らは明らかに間違っています。
vikingosegundo 2016

質問では、インターフェイスビルダーについては触れていません。
エドワード

13

スウィフト5:

    let controlStates: Array<UIControl.State> = [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved]
    for controlState in controlStates {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: controlState)
    }

1
UIControl.Stateを使用する必要がありました。UIControlStateは非推奨であると述べた
HokiEJP

9

スウィフト3:

ボタンのタイトルを設定します。

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)


6

属性付きの場合のタイトルの変更は少し異なります:

私は問題に遭遇しました:属性付きタイトルのUIButtonがある場合、以下を使用する必要があります:

my_btn.setAttributedTitle(NSAttributedString(string: my_title), for: my_state)

あたり、としてアップルのsettitleドク

ボタンのタイトルと属性付きタイトルの両方を設定した場合、ボタンはこのタイトルよりも属性付きタイトルの使用を優先します。

私は属性付きのタイトルを持っていて、それに影響を与えずにタイトルを設定しようとしました...


3

スウィフト3

@IBActionを作成すると、次のようになります。

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

これは、センダーを(Anyではなく)UIButtonとして設定するため、btnActionをUIButtonとしてターゲットにします。


2

Swift 4.2以降

ボタンのIBOutletの使用

btnOutlet.setTitle("New Title", for: .normal)

ボタンのIBActionの使用

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}

0

スウィフト3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(Title Button, for: .normal)

0

swift-04を使用してXcodeでボタンのタイトルを設定するには、最初に以下のようなパラメータータイトルとUIController状態でsetTitleと呼ばれるメソッドを作成します。

func setTitle(_ title : String?, for state : UIControl.State)   {

}

このメソッドをボタンアクションメソッドで呼び出します。

yourButtonName.setTitle("String", for: .state)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.