Проблемы при настройке заголовка UIButton в событии щелчка - PullRequest
2 голосов
/ 01 июля 2011

Я пытаюсь изменить название кнопки, когда пользователь нажимает на нее следующим кодом:

- (IBAction) hideKB: (UIButton *) sender {
     sender.titleLabel.text = @"↓";
}

Но когда я нажимаю, приложение падает, и я не могу понять, почему.

Удаление отправителя, кнопка работает без проблем.

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

Правильная сигнатура метода для действия

- (IBAction)action:(id)sender

Ваше приложение падает, потому что вашему объекту отправляется сообщение, которое он не понимает.

Попробуйте заменить ваш код чем-то вроде:

- (IBAction)hideKB:(id)sender {
    UIButton *button = (UIButton *)sender;
    [button setTitle:@"↓" forState:UIControlStateNormal];
}

Как вы можете заметить, я также изменил строку, которая устанавливает заголовок кнопки. Это связано с тем, что вам никогда не следует напрямую манипулировать свойством UIButton titleLabel, а использовать соответствующий метод установки, как показано выше.

Редактировать: Для пояснения, большинство элементов управления позволят вам использовать точечные обозначения для редактирования свойства text их titleLabel. Однако экземпляры UIButton поддерживают разные заголовки (а также изображения и фоновые изображения) в зависимости от состояния, в котором они находятся.

Если вам интересно, почему UIButton может находиться в одном из нескольких разных состояний, хороший пример, который вы часто видите, это кнопки, которые «неактивны». Это означает, что эти кнопки находятся в состоянии UIControlStateDisabled. Вы можете найти список всех возможных состояний для элемента управления в документации .

0 голосов
/ 01 июля 2011

Попробуйте использовать

 - (void)setTitle:(NSString *)title forState:(UIControlState)state

например

 [sender setTitle:"↓" forState:UIControlStateNormal];
0 голосов
/ 01 июля 2011

вы можете попробовать с:

[(UIButton *)sender setTitle: @"↓"" forState: UIControlStateNormal];

Для получения дополнительной информации вы можете обратиться к setTitle: forState: в справочнике классов UIButton

Надеюсь, это поможет.

...