2011-02-05 7 views
27

UIButtonTypeCustom(シェイプ用)タイプのUIButtonを作成したいとします。私はフォントを指定する必要があるので、button.titleLabelを使ってタイトルを割り当てたい。次のコードは動作するはずですが、ラベルは表示されません。iOS:UIButton titleLabel - 何もしませんか?

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"]; 
float width = editButtonImage.size.width; 
float height = editButtonImage.size.height; 

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom]; 
editButton.frame = CGRectMake(0, 0, width, height); 
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal]; 
editButton.adjustsImageWhenHighlighted = YES; 
editButton.titleLabel.text = @"Edit"; 
editButton.titleLabel.textColor = [UIColor whiteColor]; 
editButton.titleLabel.textAlignment = UITextAlignmentCenter; 
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14]; 
[self.view addSubview: editButton]; 

誰もが常にsetTitle:forState:を使用すると言いますが、それはあなたに好きではないフォントを与えます。 titleLabelメソッドは廃止予定ではなく、動作するはずです。

私はこの前に何度も遭遇していましたが、いつもその周りで働いていましたが、本当にそれを理解したいと思います。何か案は?

答えて

79

titleLabeltextプロパティを設定しても効果はありません。代わりに、ボタンの上に-setTitle:forState:を呼び出す:

[editButton setTitle:@"Edit" forState:UIControlStateNormal] 

ボタンが異なる状態(例えば、UIControlStateDisabledUIControlStateHighlighted)のために異なるタイトルを持つことができるので、この理由はあります。 UIControlStateNormalコントロールステートのプロパティを設定すると、他のコントロールステートを明示的に指定しないと、すべてのステートに適用されます。 UIButtonのドキュメント当たり

このクラスは、タイトル、画像、ボタンの他​​の外観特性を設定するための方法を提供します。これらのアクセサを使用すると、ボタンの状態ごとに異なる外観を指定できます。

ラベルの色とシャドウの色は、状態に基づいてカスタマイズできます。 -setTitleColor:forStateおよび-setTitleShadowColor:forStateをそれぞれ参照してください。 titleLabelの残りのプロパティ(textAlignmentおよびfontなど)は、現在設定されているとおりに動作し、すべてのコントロール状態に適用する必要があります。具体的に

UIButtontitleLabelプロパティのドキュメントを参照してください。https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel自体は読み取り専用ですが、それはあなたがそのようなフォントとして独自のプロパティの値を変更することはできませんという意味ではありません、改行モードなど。

+1

titleLabelを使用して設定できないものは、実際のテキスト値です。それは私にとってはちょっと変わったようですが、大丈夫です。 – Amagrammer

+4

最初は少し直感的ではありません。見たところでは、ラベルの 'text'プロパティを設定することは' -setTitle:forState'を呼び出すためのショートカットにすぎませんが、そうではありません。 – LucasTizma

+2

同様に、titleLabelのtextColorプロパティを直接設定することはできないようですが、setTitleColor:forState:メソッドを使用する必要があります。ドキュメントには記載されていないため、これに言及してくれてありがとう。 – arlomedia

関連する問題