2012-06-21 2 views
29

У меня есть UIButton, который должен иметь 2 статуса - «Играть» и «Пауза»; то есть в первый раз, когда пользователь видит это, он говорит «Воспроизвести», а затем всякий раз, когда пользователь нажимает на него, он должен переключаться между «Воспроизвести» и «Пауза».Как изменить свойство textLabel в UIButton программно в iOS?

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

Я использую:

myButton.titleLabel.text = @"Play"; 

myButton.titleLabel.text = @"Pause"; 

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

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

ответ

66

Оно должно быть:

[myButton setTitle:@"Play" forState:UIControlStateNormal]; 

Вам нужно пройти state, а также. Вы можете проверить другие state's here.

Вы можете сделать что-то вроде этого:

[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
[myButton setTitle:@"Stop" forState:UIControlStateSelected]; 
1

И если вы хотите, чтобы загрузить его на странице загрузки, и поддержка локализованы языка:

-(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]; 
    } 
} 
2

Я нашел, что это отчасти из дата с тех пор, как добавлены строки. По-видимому, названия кнопок, назначенных в раскадровке, являются строками. Заголовки с атрибутами имеют приоритет над названиями NSString, поэтому, если вы хотите использовать простую строку в качестве заголовка, сначала нужно удалить присвоенный заголовок. Я сделал это, как показано ниже, хотя может быть и лучший способ. Разумеется, вы можете сделать свой новый заголовок также атрибутной строкой.

[myButton setAttributedTitle: nil  forState: 0xffff]; 
[myButton   setTitle: @"Play" forState: UIControlStateNormal]; 
Смежные вопросы