UIButtonテキストの変更


102

だから私はそれをクリックしたときにUIButtonのテキストを更新しようとしています。次の行を使用してテキストを変更しています。

calibrationButton.titleLabel.text = @"Calibration";

テキストが変更されていることを確認しましたが、アプリを実行してボタンをクリックすると、テキストが一瞬「校正」に変わり、すぐにデフォルト値に戻ります。なぜこれが起こっているのでしょうか?呼び出す必要があるある種のリフレッシュ関数はありますか?


回答:


248

サブビューをレイアウトするとき、UIButtonは独自のタイトル値を使用してtitleLabelのテキスト値を設定するため、4つの状態(通常、ハイライト、選択、無効)に最大4つの異なる文字列を設定できます。

この機能のため、titleLabelのテキストを直接設定すると永続化されず、サブビューをレイアウトするときにボタンによってリセットされます。

これは、ボタンの状態のタイトルテキストを変更するために必要なことです。

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
では、どのbutton.titleLabel.text = @ "some text"を実行するのでしょうか。
ボリスガフロフ2013年

4
@BorisGafurovと入力するとbutton.titleLabel、titleLabelは読み取り専用プロパティであるため、読み取り専用プロパティのプロパティも読み取り専用であることがわかります。ドット表記を使用して編集することはできないため、編集するには明示的なメソッドが必要です。これは少なくとも私には理にかなっています。
erdekhayser 2013

1
これに気づくまで約2時間無駄にしたと思います(悲しいことに、私はすでに知っていたと思います!)
race_carr 14

ご回答有難うございます。
dinesharjani 2015年

3
@erdekhayserは実際には、読み取り専用プロパティは、CAN /書き込みプロパティを読みました。titlelabelのタグを使用して、整数をアクションメソッドに渡します。Appleのドキュメントリンク も参照してくださいAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
アーロン


6

プログラムでボタンのタイトルを以下のように設定できます:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

ストーリーボードからボタンのタイトルプロパティを設定することもできます。


2

大したことではなく、おそらく明白ですが、ボタンに使用できるいくつかの状態があります。「間違った」ものを指定した場合、テキストが希望どおりに変更されることはありません。

ここに示す方法を使用して、ボタンに追加したテキストが表示されていないことに気付きました。このリンクをチェックして、意図したUIControlStateを提供していることを確認してください。

UIControlStateHighlightedとUIControlStateSelectedの違いは何ですか?


1

Swift 3.0の場合

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)

1

Swift 2.0の場合:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)

1

すべての状態にタイトルを設定したくない場合は、通常の状態に設定してください。未設定の状態のタイトルはデフォルトで通常の状態のタイトルになります。

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