Подтвердить что ты не робот

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 НЕ устарел - он должен работать.

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

4b9b3361

Ответ 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)