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

Как изменить свойство textLabel в UIButton программно в iOS?

У меня есть UIButton, который должен иметь 2 состояния - "Play" и "Pause"; то есть в первый раз, когда пользователь видит это, он говорит "Воспроизвести", а затем всякий раз, когда пользователь нажимает на него, он должен переключаться между "Воспроизвести" и "Пауза".

Мне удалось создать сам контроллер - контент воспроизводится и приостанавливается должным образом, но я не могу изменить текст текстовой метки UIButton.

Я использую:

myButton.titleLabel.text = @"Play";

myButton.titleLabel.text = @"Pause";

Это не работает. Текст не меняется. Я также попробовал [myButton.titleLabel setText: @ "Пауза" ], и он тоже не работает.

Как я могу установить его?

4b9b3361

Ответ 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];
    }
}