Ändern Sie den Text der Schaltfläche und deaktivieren Sie die Schaltfläche in iOS

106

Wie ändere ich den Text der Schaltfläche und deaktiviere eine Schaltfläche in iOS?

Namratha
quelle

Antworten:

208

Hey Namratha, wenn Sie nach einer Änderung des Textes und des aktivierten / deaktivierten Status eines UIButton fragen, können Sie dies ganz einfach wie folgt tun:

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

Wenn Sie die Schaltflächen im Interface Builder erstellt haben und im Code darauf zugreifen möchten, können Sie die Tatsache nutzen, dass sie als Argument an die IBActionAufrufe übergeben werden:

- (IBAction) triggerActionWithSender: (id) sender;

Dies kann an die Schaltfläche gebunden werden und Sie erhalten die Schaltfläche im senderArgument, wenn die Aktion ausgelöst wird. Wenn dies nicht ausreicht (weil Sie an einer anderen Stelle als in den Aktionen auf die Schaltflächen zugreifen müssen), deklarieren Sie eine Steckdose für die Schaltfläche:

@property(retain) IBOutlet UIButton *someButton;

Dann ist es möglich, die Schaltfläche in IB an den Controller zu binden. Der NIB-Ladecode legt den Eigenschaftswert beim Laden der Schnittstelle fest.

MGunetileke
quelle
Danke dir! Ich habe UIButtons in meiner App, aber ich habe sie nirgendwo im Code erwähnt. Ich habe den Interface Builder verwendet, um den Zielaktionsmechanismus zu registrieren (zu diesem Zweck habe ich einige IBAction-Methoden, um mit Schaltflächenklicks umzugehen). Wie kann ich auf die Schaltflächen zugreifen?
Namratha
1
Ich möchte das nur hinzufügen, wenn Sie die @ -Eigenschaft für Sie deklarieren möchten. Halten Sie in XCode 4 die STRG-Taste gedrückt, klicken Sie auf die Schaltfläche und ziehen Sie die Maus in die entsprechende .h-Datei der Ansicht. Ein Dialogfeld wird angezeigt, in dem Sie zur Eingabe des Eigenschaftsnamens aufgefordert werden. Dann haben Sie die Eigenschaft, die Sie in Ihrem Code verwenden können!
Meilen
21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Verwenden UIControlStateNormalSie diese Option , um Ihren Titel festzulegen.

Es gibt einige Zustände, die UIbuttons bereitstellen. Sie können einen Blick darauf werfen:

[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];
stark koffeinhaltig
quelle
Ich wollte +1 für diesen Beitrag, entschied mich aber dagegen. [self.eraseButton setTitle: @ "Erase" forState: UIControlStateDisabled]; Dadurch wird die Taste nicht gedimmt. Es macht nichts, wenn Sie bereits setEnable gesetzt haben: als nein.
coolcool1994
18

Wenn jemand, der in Swift nach einer Lösung sucht, hier landen würde, wäre es:

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

Dokumentation: isEnabled , setTitle .

Älterer Code:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
mikiqex
quelle
'setTitle ( : forState :)' wurde in 'setTitle ( : for :)' umbenannt
Lavi Avigdor
10

Angenommen, die Schaltfläche ist eine UIButton:

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

Siehe die Dokumentation für UIButton.

Zoul
quelle
3

So ändern Sie den Schaltflächentitel:

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

Zum Deaktivieren:

[mybtn setEnabled:NO];
Bhavin Ramani
quelle
3

In Swift 3 können Sie den Titel einer Schaltfläche einfach ändern, indem Sie:

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

und Sie deaktivieren die Schaltfläche durch:

button.isEnabled = false

.normalist das gleiche wie UIControlState.normalweil der Typ abgeleitet wird.

lmiguelvargasf
quelle
Was sollen wir verwenden, wenn es sich um eine Aktionsschaltfläche handelt?
Karthikeyan Sk
0

Wenn Sie den Titel als Reaktion auf das Tippen ändern möchten, können Sie dies in der IBAction-Methode der Schaltfläche in Ihrem View Controller-Delegaten versuchen. Dadurch wird ein Voice-Chat ein- und ausgeschaltet. Das Einrichten des Voice-Chats wird hier nicht behandelt!

- (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 ist natürlich spezifisch für Voice-Chat, aber Sie können Ihre lokale boolesche Eigenschaft ow verwenden, um den Switch zu steuern.

Tim
quelle
0

SWIFT 4 mit Verlängerung

einstellen:

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

und verwenden:

yourBtn.setAllStatesTitle("btn title")
Oz Shabat
quelle