Ändern des Textes von UIButton programmgesteuert schnell


222

Einfache Frage hier. Ich habe einen UIButton, CurrencySelector, und möchte den Text programmgesteuert ändern. Folgendes habe ich:

currencySelector.text = "foobar"

Xcode gibt mir den Fehler "Erwartete Erklärung". Was mache ich falsch und wie kann ich den Text der Schaltfläche ändern?

Antworten:


595

In Swift 3, 4, 5:

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

Andernfalls:

button.setTitle("Button Title", forState: UIControlState.Normal)

Auch ein @IBOutletmuss für die deklariert werden button.


32
Sie können weglassen UIControlState. zBforState: .Normal
Funroll

11
Swift3 ist jetzt in Kleinbuchstaben zu .normalbeachten
Matthew

6
Swift3 Wechsel forStatezufor
Mathew P. Jones

1
Swift3: self.btnBuy.setTitle ("Kaufen", für: UIControlState.normal)
Thiru

5
für Swift 4 button.setTitle("Button Title",for: .normal)funktioniert auch!, danke
Rakshitha Muranga Rodrigo

74

Nur eine Klarstellung für diejenigen, die neu in der Swift- und iOS- Programmierung sind. Unterhalb der Codezeile:

button.setTitle("myTitle", forState: UIControlState.Normal)

gilt nur für IBOutlets, nicht IBActions.

Wenn Ihre App eine Schaltfläche als Funktion zum Ausführen von Code verwendet, z. B. zum Abspielen von Musik, und Sie den Titel basierend auf einer Umschaltvariablen von Playin ändern möchten Pause, müssen Sie auch eine IBOutletSchaltfläche für diese Schaltfläche erstellen .

Wenn Sie versuchen, button.setTitlegegen eine zu verwenden, erhalten IBActionSie eine Fehlermeldung. Es ist offensichtlich, sobald Sie es wissen, aber für die Noobs (wir alle waren) ist dies ein hilfreicher Tipp.


1
Ja, ich wollte genau das googeln, bis ich Ihre Antwort sah. Vielen Dank! +1
Evernoob

1
Es ist ein Muster in IOS, für dessen Entdeckung ich eine Weile gebraucht habe. Es gibt Attribute von UI-Elementen, auf die Sie nur zugreifen können, wenn ein IBOutlet erstellt wurde. Wenn Sie jemals versuchen, ein Attribut einer Benutzeroberfläche zu ändern und nicht darauf zugreifen können, stellen Sie sicher, dass Sie sowohl über die IBAction verfügen, auf der Code ausgeführt wird, als auch über das IBOutlet, das den Zugriff auf die Attribute ermöglicht.
Bendrix

8
Diese Antwort macht keinen Sinn. Die senderAktion wird die Schaltfläche sein. Sie können alles anwenden, was Sie möchten sender. Sie benötigen dazu keine Steckdose.
rmaddy

2
Weder die Antwort von Bendix noch sein Kommentar sind korrekt. Sie sind einfach falsch.
Vikingosegundo

In der Frage wird der Interface Builder nicht erwähnt, so falsch anzunehmen, dass dies der Fall ist.
Edward

13

Swift 5:

    let controlStates: Array<UIControl.State> = [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved]
    for controlState in controlStates {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: controlState)
    }

1
Ich musste UIControl.State verwenden. Es hieß, UIControlState sei veraltet
HokiEJP

9

Swift 3:

Schaltflächentitel festlegen:

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)

9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)

6

Das Ändern des Titels bei der Zuordnung ist etwas anders:

Ich bin gerade auf ein Problem gestoßen: Wenn Sie einen UIButton mit einem zugeschriebenen Titel haben, müssen Sie Folgendes verwenden:

my_btn.setAttributedTitle(NSAttributedString(string: my_title), for: my_state)

gemäß Apple SetTitle Doc :

Wenn Sie sowohl einen Titel als auch einen zugewiesenen Titel für die Schaltfläche festlegen, bevorzugt die Schaltfläche die Verwendung des zugewiesenen Titels gegenüber diesem.

Ich hatte einen zugeschriebenen Titel und habe versucht, Titel darauf zu setzen, ohne Wirkung ...


3

Swift 3

Wenn Sie die @IBAction machen:

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

Dadurch wird der Absender als UIButton (anstelle von Any) festgelegt, sodass die btnAction als UIButton ausgeführt wird


2

schnell 4.2 und höher

mit dem IBOutlet der Schaltfläche

btnOutlet.setTitle("New Title", for: .normal)

Verwenden der IBAction der Schaltfläche

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}

0

Swift 3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(Title Button, for: .normal)

0

So legen Sie mit swift - 04 einen Titel für eine Schaltfläche in Xcode fest: Erstellen Sie zunächst eine Methode namens setTitle mit Parametertitel und UIController-Status wie unten;

func setTitle(_ title : String?, for state : UIControl.State)   {

}

und erinnern Sie sich an diese Methode in Ihrer Button-Action-Methode wie;

yourButtonName.setTitle("String", for: .state)
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.