UIButton-Text ändern


102

Ich versuche also, den Text auf einem UIButton zu aktualisieren, wenn ich darauf klicke. Ich benutze die folgende Zeile, um den Text zu ändern:

calibrationButton.titleLabel.text = @"Calibration";

Ich habe überprüft, ob sich der Text ändert, aber wenn ich die App starte und auf die Schaltfläche klicke, ändert sie sich für den Bruchteil einer Sekunde in "Kalibrierung" und kehrt dann direkt zu ihrem Standardwert zurück. Irgendwelche Ideen, warum dies passieren könnte? Gibt es eine Art Aktualisierungsfunktion, die ich aufrufen muss?


Antworten:


248

Beim Anordnen der Unteransichten legt ein UIButton den Textwert des titleLabel mithilfe seiner eigenen Titelwerte fest, sodass Sie bis zu vier verschiedene Zeichenfolgen für die vier Status festlegen können (normal, hervorgehoben, ausgewählt, deaktiviert).

Aufgrund dieser Funktion bleibt das direkte Festlegen des Textes von titleLabel nicht bestehen und wird durch die Schaltfläche zurückgesetzt, wenn die Unteransichten angeordnet werden.

Dies müssen Sie tun, um den Titeltext für den Status einer Schaltfläche zu ändern.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
Also, was soll button.titleLabel.text = @ "irgendein Text" dann tun?
Boris Gafurov

4
@BorisGafurov Wenn Sie eingeben button.titleLabel, sehen Sie, dass titleLabel eine schreibgeschützte Eigenschaft ist und daher alle Eigenschaften einer schreibgeschützten Eigenschaft auch schreibgeschützt sind. Die Verwendung der Punktnotation zum Bearbeiten funktioniert nicht. Daher benötigen Sie explizite Methoden, um sie zu bearbeiten. Das macht zumindest für mich Sinn.
Erdekhayser

1
Ich glaube, ich habe ungefähr zwei Stunden verschwendet, bis mir das klar wurde (was ich leider schon wusste!)
race_carr

Danke für deine Antwort.
Dinesharjani

3
@erdekhayser Eigentlich schreibgeschützte Eigenschaften CAN - Lese- / Schreibeigenschaften. Ich verwende das Tag des Titellabels, um eine Ganzzahl an eine Aktionsmethode zu übergeben. Siehe auch Apples Docs Link Although this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Aaron


6

Programmgesteuert können Sie den Schaltflächentitel wie folgt einstellen:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

Sie können die Eigenschaft für Schaltflächentitel auch über das Storyboard festlegen.


2

Keine große Sache und möglicherweise offensichtlich, aber es gibt mehrere Zustände für Schaltflächen. Wenn Sie die 'falsche' angeben, wird der Text nicht wie gewünscht geändert.

Ich habe festgestellt, dass auf meiner Schaltfläche der von mir hinzugefügte Text mit den hier gezeigten Methoden nicht angezeigt wird. Überprüfen Sie diesen Link, um sicherzustellen, dass Sie den beabsichtigten UIControlState bereitstellen.

Was ist der Unterschied zwischen UIControlStateHighlighted und UIControlStateSelected?


1

Für Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)

1

Für Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)

1

Wenn Sie den Titel nicht für alle Status festlegen möchten, legen Sie ihn einfach für den normalen Status fest, da der Titel für die nicht festgelegten Status standardmäßig den Titel des normalen Status verwendet.

btn.setTitle("Some text", for:.normal)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.