IOS: UIButton titleLabel - он вообще что-то делает?
Я хочу создать 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 НЕ устарел - он должен работать.
Я сталкивался с этим несколько раз раньше и всегда просто работал вокруг него, но мне очень хотелось бы разобраться в этом. Любые идеи?
Ответы
Ответ 1
Установка свойства titleLabel
text
, как это, не влияет. Вместо этого вызовите -setTitle:forState:
на кнопку:
[editButton setTitle:@"Edit" forState:UIControlStateNormal]
Причина этого заключается в том, что кнопка может иметь разные заголовки для разных состояний (например, UIControlStateDisabled
, UIControlStateHighlighted
). Установка свойства для состояния управления UIControlStateNormal
будет применяться ко всем состояниям, если вы не укажете другие явно.
В документации для UIButton
:
Этот класс предоставляет методы для настройки названия, изображения и других свойств внешнего вида кнопки. Используя эти аксессоры, вы можете указать другой вид для каждого состояния кнопки.
Вы можете настроить цвет ярлыков и тень на основе состояния. См. -setTitleColor:forState
и -setTitleShadowColor:forState
, соответственно. Остальные свойства на titleLabel
, такие как textAlignment
и font
, должны работать так, как вы их установили сейчас, и должны применяться ко всем состояниям управления.
В частности, см. документацию для свойства UIButton
titleLabel
: https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel
titleLabel
сам по себе доступен только для чтения, но это не означает, что вы не можете изменять значения своих собственных свойств, таких как шрифт, режим прерывания строки и т.д.
Ответ 2
Вот как я работал с Swift 4.2.
counterButton.setTitle("Start Counter",
for:UIControl.State.normal)