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


Відповіді:


208

Привіт Намратха, якщо ви запитуєте про зміну тексту та ввімкнутий / вимкнений стан UIButton, це можна зробити досить легко, як описано нижче;

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

Якщо ви створили кнопки в Interface Builder і хочете отримати доступ до них у коді, ви можете скористатися тим, що вони передаються як аргумент 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: @ "Erase" forState: UIControlStateDisabled]; Це не затьмарює кнопку. Це нічого не робить, якщо ви вже встановилиEnable: як ні.
coolcool1994

18

Якщо хтось, хто шукає рішення у Свіфті, приземлився тут, це було б:

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

'setTitle ( : forState :)' було перейменовано на 'setTitle ( : для :)'
Lavi Avigdor

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тому, що тип робиться для висновку.


Що нам використовувати, якщо це кнопка дії?
Karthikeyan Sk

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, звичайно, характерний для голосового чату, але ви можете використовувати своє власне локальне буле властивість для управління комутатором.


0

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")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.