web-dev-qa-db-ja.com

iOSでUIButtonのtextLabelプロパティをプログラムで変更する方法は?

「Play」と「Pause」の2つのステータスを持つUIButtonがあります。つまり、ユーザーが最初にそれを見ると「Play」と表示され、ユーザーがクリックするたびに「Play」と「Pause」を切り替える必要があります。

コントローラー自体を作成することができました-コンテンツは適切に再生および一時停止されます-しかし、UIButton Text Labelテキストを変更することはできません。

私が使う:

myButton.titleLabel.text = @"Play";

myButton.titleLabel.text = @"Pause";

動いていない。テキストは変更されていません。 [myButton.titleLabel setText:@ "Pause"]も試しましたが、うまくいきません。

どうすれば設定できますか?

30
Ohad Regev

そのはず:

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

stateも渡す必要があります。他のstateの-​​ here を確認できます。

その後、次のようなことができます。

[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Stop" forState:UIControlStateSelected];
67
Rui Peres

Swift 4

myButton.setTitle("Pause", for: .normal)
6
Wissa

属性付き文字列が追加されたため、これはやや時代遅れであることがわかりました。ストーリーボードで割り当てられたボタンのタイトルは、属性付きの文字列です。属性付きタイトルはNSStringタイトルよりも優先されるため、タイトルとして単純な文字列を使用する場合は、最初に属性付きタイトルを削除する必要があります。より良い方法があるかもしれませんが、私は以下のようにしました。もちろん、新しいタイトルを属性付き文字列にすることもできます。

[myButton setAttributedTitle: nil     forState: 0xffff];
[myButton           setTitle: @"Play" forState: UIControlStateNormal];
2
LostInTheTrees

また、ページの読み込み時に読み込み、ローカライズされた言語をサポートする場合:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    if (self.flagToChangeLabel){
        NSString* newBtnTitle = NSLocalizedString(@"LOCALIZED_KEY", nil);
        [self.laterButton setTitle:newBtnTitle forState:UIControlStateNormal];
        [self.laterButton setTitle:newBtnTitle forState:UIControlStateSelected];
    }
}
1
Aviram Net