Zmiana tekstu UIButton jest programowo szybka

222

Proste pytanie tutaj. Mam UIButton, currencySelector i chcę programowo zmienić tekst. Oto co mam:

currencySelector.text = "foobar"

Xcode wyświetla błąd „Oczekiwana deklaracja”. Co robię źle i jak mogę zmienić tekst przycisku?

rocket101
źródło

Odpowiedzi:

595

W Swift 3, 4, 5:

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

Inaczej:

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

Również @IBOutletmusi zadeklarować dla button.

Gal Marom
źródło
32
Możesz pominąć UIControlState. np.forState: .Normal
funroll
11
Swift3 jest teraz .normalzwrócić uwagę na małe litery
Mt
6
Zmiana Swift3 forStatenafor
Mathew P. Jones
1
Swift3: self.btnBuy.setTitle ( "Kup", za: UIControlState.normal)
Thiru
5
za szybkie 4 również button.setTitle("Button Title",for: .normal)działa !, dzięki
Rakshitha Muranga Rodrigo
74

Tylko wyjaśnienie dla tych, którzy dopiero zaczynają programować w Swift i iOS . Poniżej linii kodu:

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

dotyczy tylko IBOutlets, a nie IBActions.

Tak więc, jeśli Twoja aplikacja używa przycisku jako funkcji do wykonania kodu, powiedzmy odtwarzania muzyki, a chcesz zmienić tytuł z Playna Pausena podstawie zmiennej przełączającej, musisz również utworzyć IBOutletdla tego przycisku.

Jeśli spróbujesz użyć button.setTitleprzeciwko IBAction, otrzymasz błąd. To oczywiste, kiedy się zorientujesz, ale dla noobów (wszyscy byliśmy) jest to przydatna wskazówka.

Bendrix
źródło
1
Tak, miałem zamiar google dokładnie tak długo, dopóki nie zobaczyłem twojej odpowiedzi. Dzięki! +1
Evernoob,
1
Jest to wzór w IOS, którego odkrycie zajęło mi trochę czasu. Istnieją atrybuty elementów interfejsu użytkownika, do których nie masz dostępu, dopóki nie zostanie utworzony IBOutlet. Jeśli kiedykolwiek próbujesz zmienić atrybut interfejsu użytkownika i nie możesz uzyskać do niego dostępu, upewnij się, że masz zarówno IBAction z uruchomionym kodem, jak i IBOutlet, który zapewnia dostęp do atrybutów.
Bendrix,
8
Ta odpowiedź nie ma sensu. senderDziałania będzie przycisk. Możesz zastosować cokolwiek zechcesz sender. Nie potrzebujesz do tego gniazdka.
rmaddy 18.04.2016
2
Ani odpowiedź Bendixa, ani jego komentarz nie są poprawne. Oni są po prostu w błędzie.
vikingosegundo
Pytanie nie wspomina o konstruktorze interfejsów, więc błędne jest założenie, że tak jest.
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)
    }
Dmitry
źródło
1
Musiałem użyć UIControl.State. Stwierdzono, że UIControlState jest przestarzałe
HokiEJP
9

Swift 3:

Ustaw tytuł przycisku:

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

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)
Bhavin Ramani
źródło
9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)
Tyler Rutt
źródło
6

Zmiana tytułu po przypisaniu jest nieco inna:

Właśnie natrafiłem na problem: jeśli masz UIButton z przypisanym tytułem, musisz użyć:

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

zgodnie z dokumentem Apple SetTitle Doc :

Jeśli dla przycisku ustawisz zarówno tytuł, jak i tytuł przypisany, przycisk woli używać przypisanego tytułu od tego przycisku.

Miałem przypisany tytuł i próbowałem go ustawić, bez żadnego efektu ...

Christian Navelot
źródło
3

Szybki 3

Po wykonaniu @IBAction:

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

To ustawia nadawcę jako UIButton (zamiast Any), więc celuje w btnAction jako UIButton

gustavoanalytics
źródło
2

szybkie 4.2 i nowsze

za pomocą przycisku IBOutlet

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

za pomocą przycisku IBAction

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}
midhun p
źródło
0

Szybki 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)
Giang
źródło
0

Aby ustawić tytuł przycisku w Xcode za pomocą swift - 04: najpierw utwórz metodę o nazwie setTitle z tytułem parametru i stanem UIController jak poniżej;

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

}

i przywołaj tę metodę w metodzie działania przycisku, np.

yourButtonName.setTitle("String", for: .state)
Jasani Hardik
źródło