たくさんの似たような質問を見てきましたが、私が探している答えは誰にもありませんでした。このコードを使用してUIButtonを作成し、そのtitleLabelを設定すると、UIButtonは表示されますが、titleLabelは表示されません。
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
button.titleLabel.text = @"Title";
button.titleLabel.font = [UIFont fontWithName:@"System-Bold" size:25.0f];
[self.view addSubview:button];
このコードはボタンを表示しますが、titleViewではなくタイトルです。なぜそれができるのですか? iOS 6以降向けに開発しています。
注1:私はこのようなオプションを探していません:
[button setTitle:@"Title" forState:UIControlStateNormal];
TitleLabelを使用してフォントとfontSizeを設定する必要があるためです。
注2:UILabelを作成して、ボタンのサブビューとして追加することはできません。ボタンは後でアニメーション化されるため。
ボタンのタイトルを更新するときは、常にControlStateを指定する必要があります! UIButtonには次の4つの値があります。
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected
例えば:
[button setTitle:@"Title" forState:UIControlStateNormal];
次に、titleLabelのカスタム設定を設定できます。
[button.titleLabel setFont:[UIFont fontWithName:@"Zapfino" size:20.0]];
[button.titleLabel setTextColor:[UIColor blueColor]];
[button setTitle:@"Title" forState:UIControlStateNormal];
タイトル文字列を設定する正しい方法です。
titleLabelは、フォントと色を設定するために使用されます。
使用してみてください...
[button setNeedsLayout];
[button layoutIfNeeded];
ボタンを押してレイアウトを更新します。
このプロパティは読み取り専用ですが、独自のプロパティは読み取り/書き込み可能です。これらのプロパティを主に使用して、ボタンのテキストを構成します。例えば:
UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];
button.titleLabel.font = [UIFont systemFontOfSize: 12];
button.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
ラベルオブジェクトを使用して、テキストの色や影の色を設定しないでください。代わりに、このクラスのsetTitleColor(:for :)およびsetTitleShadowColor(:for :)メソッドを使用してこれらの変更を行います。ラベルの実際のテキストを設定するには、setTitle(_:for :)を使用します(button.titleLabel.textではテキストを設定できません)。 titleLabelプロパティは、ボタンがまだ表示されていない場合でも値を返します。システムボタンの場合、プロパティの値はnilです。
in Swift:
button.setTitle("your text", for: .normal)
button.setTitleColor(.white, for: .normal)