изменить текст кнопки и отключить кнопку в iOS

107

Как изменить текст кнопки и отключить кнопку в iOS?

Намратха
источник

Ответы:

208

Привет, Намрата! Если вы спрашиваете об изменении текста и включенного / выключенного состояния UIButton, это можно легко сделать следующим образом;

[myButton setTitle:@"Normal State Title" forState:UIControlStateNormal]; // To set the title
[myButton setEnabled:NO]; // To toggle enabled / disabled

Если вы создали кнопки в Интерфейсном Разработчике и хотите получить к ним доступ в коде, вы можете воспользоваться тем фактом, что они передаются в качестве аргумента для IBActionвызовов:

- (IBAction) triggerActionWithSender: (id) sender;

Его можно привязать к кнопке, и вы получите кнопку в senderаргументе при запуске действия. Если этого недостаточно (потому что вам нужно получить доступ к кнопкам где-то еще, а не в действиях), объявите выход для кнопки:

@property(retain) IBOutlet UIButton *someButton;

Затем можно привязать кнопку в IB к контроллеру, код загрузки NIB установит значение свойства при загрузке интерфейса.

М.Гунетилеке
источник
Спасибо! В моем приложении есть UIButtons, но я нигде не упоминал о них в коде. Я использовал построитель интерфейса для регистрации механизма целевого действия (для этого у меня есть несколько методов IBAction для обработки щелчков кнопок), так как мне получить доступ к кнопкам?
Намрата
1
Просто также хочу добавить, что если вы хотите, чтобы свойство @ было объявлено для вас. В XCode 4 удерживайте нажатой клавишу CTRL, щелкните кнопку и затем перетащите указатель мыши в соответствующий файл .h представления. Появится диалоговое окно с запросом имени свойства. Тогда вуаля у вас будет свойство, которое вы сможете использовать в своем коде!
milesmeow
21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Используйте, UIControlStateNormalчтобы установить заголовок.

Есть несколько состояний, которые предоставляют UIbuttons, вы можете посмотреть:

[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
с высоким содержанием кофеина
источник
Я собирался поставить +1 к этому посту, но решил не делать этого. [self.eraseButton setTitle: @ "Стереть" forState: UIControlStateDisabled]; Это не затемняет кнопку. Он ничего не делает, если у вас уже есть setEnable: as no.
coolcool1994
18

Если кто-то, ищущий решение в Swift, попадет сюда, это будет:

myButton.isEnabled = false // disables
myButton.setTitle("myTitle", for: .normal) // sets text

Документация: isEnabled , setTitle .

Старый код:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
mikiqex
источник
'setTitle ( : forState :)' был переименован в 'setTitle ( : for :)'
Лави Авигдор
10

Предполагая, что кнопка - это UIButton:

UIButton *button = …;
[button setEnabled:NO]; // disables
[button setTitle:@"Foo" forState:UIControlStateNormal]; // sets text

См. Документацию для UIButton.

зул
источник
3

Чтобы изменить заголовок кнопки:

[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

Для отключения:

[mybtn setEnabled:NO];
Бхавин Рамани
источник
3

В Swift 3 вы можете просто изменить заголовок кнопки:

button.setTitle("Title", for: .normal)

и вы отключите кнопку:

button.isEnabled = false

.normalто же самое, UIControlState.normalпотому что тип является предполагаемым.

lmiguelvargasf
источник
Что мы должны использовать, если это кнопка действия?
Karthikeyan Sk
1

SWIFT 4 с расширением

устанавливать:

// set button label for all states
extension UIButton {
    public func setAllStatesTitle(_ newTitle: String){
        self.setTitle(newTitle, for: .normal)
        self.setTitle(newTitle, for: .selected)
        self.setTitle(newTitle, for: .disabled)
    }
}

и используйте:

yourBtn.setAllStatesTitle("btn title")
Оз Шабат
источник
0

Если вы хотите изменить заголовок в ответ на нажатие, вы можете попробовать это внутри метода IBAction кнопки в делегате контроллера представления. Это включает и выключает голосовой чат. Настройка голосового чата здесь не рассматривается!

- (IBAction)startChat:(id)sender {
UIButton *chatButton = (UIButton*)sender;
if (!voiceChat.active) {
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat will become live. Please be careful with feedback if your friend is nearby."
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    [voiceChat start];
    voiceChat.active = YES;
    [chatButton setTitle:@"Stop Chat" forState:UIControlStateNormal];
}
else {
    [voiceChat stop];
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat is closed"
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    voiceChat.active = NO;
    [chatButton setTitle:@"Chat" forState:UIControlStateNormal];
}

}

voiceChat, конечно, специфичен для голосового чата, но вы можете использовать свое локальное логическое свойство для управления переключателем.

Тим
источник