Как изменить свойство textLabel в UIButton программно в iOS?
У меня есть UIButton
, который должен иметь 2 состояния - "Play" и "Pause"; то есть в первый раз, когда пользователь видит это, он говорит "Воспроизвести", а затем всякий раз, когда пользователь нажимает на него, он должен переключаться между "Воспроизвести" и "Пауза".
Мне удалось создать сам контроллер - контент воспроизводится и приостанавливается должным образом, но я не могу изменить текст текстовой метки UIButton.
Я использую:
myButton.titleLabel.text = @"Play";
myButton.titleLabel.text = @"Pause";
Это не работает. Текст не меняется. Я также попробовал [myButton.titleLabel setText: @ "Пауза" ], и он тоже не работает.
Как я могу установить его?
Ответы
Ответ 1
Это должно быть:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
Вам нужно передать state
. Вы можете проверить другие state
здесь.
Затем вы можете сделать что-то вроде этого:
[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Stop" forState:UIControlStateSelected];
Ответ 2
Я обнаружил, что это несколько устарело, поскольку добавленные строки добавлены. По-видимому, названия кнопок, назначенных в раскадровке, являются строками. Заголовки с атрибутами имеют приоритет над названиями NSString, поэтому, если вы хотите использовать простую строку в качестве заголовка, сначала нужно удалить присвоенный заголовок. Я сделал это, как показано ниже, хотя может быть и лучший способ. Конечно, вы могли бы сделать свой новый заголовок также атрибутной строкой.
[myButton setAttributedTitle: nil forState: 0xffff];
[myButton setTitle: @"Play" forState: UIControlStateNormal];
Ответ 3
И если вы хотите загрузить его на загрузку страницы и поддерживать локализованный язык:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.flagToChangeLabel){
NSString* newBtnTitle = NSLocalizedString(@"LOCALIZED_KEY", nil);
[self.laterButton setTitle:newBtnTitle forState:UIControlStateNormal];
[self.laterButton setTitle:newBtnTitle forState:UIControlStateSelected];
}
}