zmień tekst przycisku i wyłącz przycisk w iOS

107

Jak zmienić tekst przycisku i wyłączyć przycisk w iOS?

Namratha
źródło

Odpowiedzi:

208

Hej Namratha, jeśli pytasz o zmianę tekstu i stan włączonego / wyłączonego przycisku UIButton, można to zrobić dość łatwo w następujący sposób;

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

Jeśli utworzyłeś przyciski w Interface Builder i chcesz uzyskać do nich dostęp w kodzie, możesz wykorzystać fakt, że są one przekazywane jako argument do IBActionwywołań:

- (IBAction) triggerActionWithSender: (id) sender;

Może to być powiązane z przyciskiem, a przycisk zostanie wyświetlony w senderargumencie po uruchomieniu akcji. Jeśli to nie wystarczy (ponieważ potrzebujesz dostępu do przycisków w innym miejscu niż w akcjach), zadeklaruj gniazdko dla przycisku:

@property(retain) IBOutlet UIButton *someButton;

Wtedy możliwe jest powiązanie przycisku w IB ze sterownikiem, kod ładujący NIB ustawi wartość właściwości podczas ładowania interfejsu.

MGunetileke
źródło
Dziękuję Ci! Mam UIButtons w mojej aplikacji, ale nigdzie nie wspomniałem o nich w kodzie. Użyłem konstruktora interfejsu do zarejestrowania mechanizmu target-action (w tym celu mam kilka metod IBAction do obsługi kliknięć przycisków), więc jak uzyskać dostęp do przycisków?
Namratha
1
Po prostu chcę to dodać, jeśli chcesz zadeklarować właściwość @. W XCode 4 przytrzymaj klawisz CTRL, kliknij przycisk, a następnie przeciągnij myszą do odpowiedniego pliku .h widoku. Pojawi się okno dialogowe z pytaniem o nazwę właściwości. Więc voila, będziesz mieć właściwość do użycia w swoim kodzie!
milesmeow
21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Użyj, UIControlStateNormalaby ustawić swój tytuł.

Istnieje kilka stanów, które zapewniają przyciski UI, możesz rzucić okiem:

[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];
bogata w kofeinę
źródło
Zamierzałem dać +1 temu wpisowi, ale postanowiłem tego nie robić. [self.eraseButton setTitle: @ "Erase" forState: UIControlStateDisabled]; To nie przyciemnia przycisku. Nie robi nic, jeśli już ustawiłeśEnable: jako nie.
coolcool1994
18

Jeśli ktoś, kto szuka rozwiązania w Swift, wylądowałby tutaj, byłoby to:

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

Dokumentacja: isEnabled , setTitle .

Starszy kod:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
mikiqex
źródło
Nazwa „setTitle ( : forState :)” została zmieniona na „setTitle ( : for :)”
Lavi Avigdor
10

Zakładając, że przycisk to UIButton:

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

Zobacz dokumentację UIButton.

zoul
źródło
3

Aby zmienić tytuł przycisku:

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

Do wyłączenia:

[mybtn setEnabled:NO];
Bhavin Ramani
źródło
3

W Swift 3 możesz po prostu zmienić tytuł przycisku poprzez:

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

i wyłączasz przycisk poprzez:

button.isEnabled = false

.normaljest taki sam, jak w UIControlState.normalprzypadku wywnioskowania typu.

lmiguelvargasf
źródło
Czego powinniśmy użyć, jeśli jest to przycisk akcji?
Karthikeyan Sk
1

SWIFT 4 z rozszerzeniem

zestaw:

// 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)
    }
}

I użyć:

yourBtn.setAllStatesTitle("btn title")
Oz Shabat
źródło
0

Jeśli chcesz zmienić tytuł w odpowiedzi na dotknięcie, możesz to wypróbować w metodzie IBAction przycisku w delegacie kontrolera widoku. Powoduje to włączanie i wyłączanie czatu głosowego. Nie omówiono tutaj konfiguracji czatu głosowego!

- (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 jest oczywiście specyficzny dla czatu głosowego, ale możesz użyć własnej lokalnej właściwości boolowskiej do sterowania przełącznikiem.

Tim
źródło