web-dev-qa-db-ja.com

iOS:UIButton titleLabel-何もしませんか?

タイプがUIButtonTypeCustom(形状用)のUIButtonを作成します。フォントを指定する必要があるので、button.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メソッドは廃止予定ではありません-動作するはずです。

私はこれに何度か遭遇したことがあり、常にそれを回避しましたが、私は本当にそれを理解したいと思います。何か案は?

27
Amagrammer

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

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

これは、ボタンの状態によってタイトルが異なる可能性があるためです(例:UIControlStateDisabledUIControlStateHighlighted)。 UIControlStateNormal制御状態のプロパティを設定すると、他の状態を明示的に指定しない場合、すべての状態に適用されます。

UIButtonのドキュメントによると:

このクラスは、ボタンのタイトル、画像、およびその他の外観プロパティを設定するためのメソッドを提供します。これらのアクセサーを使用すると、ボタンの状態ごとに異なる外観を指定できます。

状態に基づいてラベルの色と影の色をカスタマイズできます。 -setTitleColor:forState-setTitleShadowColor:forStateをそれぞれ参照してください。 titleLabeltextAlignmentなどのfontの残りのプロパティは、設定したとおりに機能し、すべての制御状態に適用されるはずです。

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

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

79
CIFilter

Swift 4.2。

counterButton.setTitle("Start Counter",
                      for:UIControl.State.normal)
0
raddevus