iOS: UIButton titleLabel - это вообще что-то делает? - PullRequest
27 голосов
/ 06 февраля 2011

Я хочу сделать UIButton с типом UIButtonTypeCustom (для фигуры). Я хочу назначить заголовок, используя 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 НЕ устарел - он должен работать.

Я сталкивался с этим несколько раз и всегда просто работал над этим, но я бы очень хотел это выяснить. Есть идеи?

Ответы [ 2 ]

79 голосов
/ 06 февраля 2011

Установка свойства titleLabel s text таким образом не имеет никакого эффекта. Вместо этого вызовите -setTitle:forState: на кнопке:

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

Причина этого в том, что кнопка может иметь разные заголовки для разных состояний (например, UIControlStateDisabled, UIControlStateHighlighted). Установка свойства для элемента управления UIControlStateNormal будет применяться ко всем состояниям, если вы не укажете другие явно.

Согласно документации для UIButton:

Этот класс предоставляет методы для настройки заголовка, изображения и других свойств внешнего вида кнопки. Используя эти методы доступа, вы можете указать различный внешний вид для каждого состояния кнопки.

Вы можете настроить цвет метки и цвет тени в зависимости от состояния. См. -setTitleColor:forState и -setTitleShadowColor:forState соответственно. Остальные свойства titleLabel, такие как textAlignment и font, должны работать так, как вы их установили сейчас, и должны применяться ко всем состояниям управления.

В частности, см. Документацию для UIButton s titleLabel свойство: https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel сам по себе только для чтения, но это не значит, что вы не можете изменять значения его собственных свойств, таких как шрифт, режим разрыва строки и т. Д.

0 голосов
/ 05 декабря 2018

Вот как я работал с использованием Swift 4.2.

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