だから私はそれをクリックしたときにUIButtonのテキストを更新しようとしています。次の行を使用してテキストを変更しています。
calibrationButton.titleLabel.text = @"Calibration";
テキストが変更されていることを確認しましたが、アプリを実行してボタンをクリックすると、テキストが一瞬「校正」に変わり、すぐにデフォルト値に戻ります。なぜこれが起こっているのでしょうか?呼び出す必要があるある種のリフレッシュ関数はありますか?
だから私はそれをクリックしたときにUIButtonのテキストを更新しようとしています。次の行を使用してテキストを変更しています。
calibrationButton.titleLabel.text = @"Calibration";
テキストが変更されていることを確認しましたが、アプリを実行してボタンをクリックすると、テキストが一瞬「校正」に変わり、すぐにデフォルト値に戻ります。なぜこれが起こっているのでしょうか?呼び出す必要があるある種のリフレッシュ関数はありますか?
回答:
サブビューをレイアウトするとき、UIButtonは独自のタイトル値を使用してtitleLabelのテキスト値を設定するため、4つの状態(通常、ハイライト、選択、無効)に最大4つの異なる文字列を設定できます。
この機能のため、titleLabelのテキストを直接設定すると永続化されず、サブビューをレイアウトするときにボタンによってリセットされます。
これは、ボタンの状態のタイトルテキストを変更するために必要なことです。
[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
button.titleLabel
、titleLabelは読み取り専用プロパティであるため、読み取り専用プロパティのプロパティも読み取り専用であることがわかります。ドット表記を使用して編集することはできないため、編集するには明示的なメソッドが必要です。これは少なくとも私には理にかなっています。
ボタンのテキストを設定するには、次の方法を使用します。
[calibrationButton setTitle: @"Calibration" forState: UIControlStateNormal];
詳細については、UIButton
クラスリファレンスを参照してください...
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html
またはSwift 3の場合:
calibrationButton.setTitle("Calibration", for: .normal)
プログラムでボタンのタイトルを以下のように設定できます:
[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];
ストーリーボードからボタンのタイトルプロパティを設定することもできます。
大したことではなく、おそらく明白ですが、ボタンに使用できるいくつかの状態があります。「間違った」ものを指定した場合、テキストが希望どおりに変更されることはありません。
ここに示す方法を使用して、ボタンに追加したテキストが表示されていないことに気付きました。このリンクをチェックして、意図したUIControlStateを提供していることを確認してください。
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)
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)
すべての状態にタイトルを設定したくない場合は、通常の状態に設定してください。未設定の状態のタイトルはデフォルトで通常の状態のタイトルになります。
btn.setTitle("Some text", for:.normal)