UIButton
があります。これを押すと、ユーザーが設定を変更できる新しいビューが表示されます。ビューが閉じられたら、UIButton
のタイトル/テキストを更新して、新しい状態を反映させたいと思います。私は呼んでいます:
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
ただし、IBで指定されている元のテキスト/タイトルから変更されることはありません。
View ControllerクラスでIBOutletとして指定されたボタンがあり、Interface Builderでアウトレットとして適切に接続されていますか(新しい参照アウトレットからファイル所有者へのCtrlドラッグとUIButtonオブジェクトの選択)?これらの症状が見られるとき、それは通常私が抱えている問題です。
編集:ここではそうではありませんが、ボタンにattributed titleを設定し、属性タイトルではなくタイトルを変更しようとすると、このようなことが起こります。
UIControlStateNormalのタイトルパラメーターを設定するだけで問題が解決し、他の状態でも自動的に機能します。別のUIControlStateを設定するときに問題があるようです。
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
別の問題を発見しました。それはiOS 5で導入されたバグかもしれませんが、私はそれを遭遇した他の誰にも指摘したいと思いました。
XIBのボタンにデフォルトのテキストを設定しない場合、プログラムで設定してもテキストは表示されません。また、XIBでテキストを設定すると、その後プログラムでボタンに割り当てるテキストは、デフォルトのテキストのサイズに切り捨てられます。
最後に、ボタンでビューを表示してから、別のビュー(ActionSheetなど)を呼び出してそれを閉じると、プログラムでボタンに割り当てたテキストが消去され、ボタンのキャプションが設定したものに戻りますXIBでアップ。
Caffeine Comaの問題は解決しましたが、タイトルがUIButtonに表示されない別の潜在的な原因を提供したいと思います。
を使用してUIButtonの画像を設定した場合
- (void)setImage:(UIImage *)image forState:(UIControlState)state
タイトルをカバーできます。私はこれを困難な方法で見つけて、同じ理由でこのページを読む人がいることを想像します。
代わりにこのメソッドを使用してください
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state
ボタンの画像とタイトルは影響を受けません。
プログラムで作成したボタンと.xibで作成したボタンでこれをテストしました
Swift 4:現在
button.setTitle("Click", for: .normal)
for Swift:
button.setTitle("Swift", forState: UIControlState.Normal)
ドキュメントが答えを教えてくれます! UIButtonは、使用する属性付き文字列が既にある場合、タイトルの変更を無視します(Xcodeインターフェイスビルダーを使用するときに取得するデフォルトのようです)。
私は次を使用しました:
[self.loginButton
setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Error !!!" attributes:nil]
forState:UIControlStateDisabled];
[self.loginButton setEnabled:NO];
考えられるもう1つの原因は次のとおりです。
(id)initWithNibName: ...
メソッドでボタンのタイトルを設定しようとしても、ボタンプロパティはnilのままです。 UIButtonにはまだ割り当てられていません。
(void)viewWillLoad
や(void)viewWillAppear
などのメソッドでボタンを設定していることを確認する必要がありますが、(void)viewDidAppear
のように遅く設定したくないでしょう。
時には非常に複雑になることがあります。簡単な方法は、「refresh」ボタンビューです!
//Do stuff to your button here. For example:
[mybutton setEnabled:YES];
//Refresh it to new state.
[mybutton setNeedsDisplay];
@funrollは絶対に正しいです。ここで、必要なものを確認できます 関数がメインスレッドでのみ実行されることを確認してください 。スレッドを処理したくない場合は、たとえば、NSUserDefaultsを作成し、ViewDidLoadでチェッキング条件が別のビューでボタンを押したかどうか(NSUserDefaultsで設定された別のビューで必要な情報)および条件セットに必要なタイトルUIButton、つまり[yourButton setTitle:@ "Title" forState:UIControlStateNormal];
私はこれに引き続き問題を抱えていました。唯一の解決策は、uibuttonにサブビューとして画像とラベルを追加することでした。それから、主な問題は、タイトルがAttributedのUIButtonを使用していることだとわかりました。プレーンに変更したとき、titleLabel.textを設定するだけでうまくいきました!
メインスレッドにいることを確認してください。
そうでない場合でも、ボタンテキストは保存されます。デバッガでオブジェクトを検査するときにそこにあります。ただし、実際にはビューは更新されません。