Зміна тексту програмного забезпечення UIButton швидко


222

Тут просте запитання. У мене є UIButton, CurrencySelector, і я хочу програмно змінити текст. Ось що я маю:

currencySelector.text = "foobar"

Xcode дає мені помилку "Очікувана декларація". Що я роблю неправильно, і як можна змінити текст кнопки?

Відповіді:


595

У Swift 3, 4, 5:

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

Інакше:

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

Також є @IBOutletзадекларований для button.


32
Можна опустити UIControlState. наприкладforState: .Normal
funroll

11
Swift3 .normalвідзначила нижню букву
Метью

6
Swift3 змінити forStateнаfor
Mathew P. Jones

1
Swift3: self.btnBuy.setTitle ( "Купити", для: UIControlState.normal)
Тира

5
для swift 4 також button.setTitle("Button Title",for: .normal)працює !, дякую
Ракшита Муранга Родріго,

74

Просто роз'яснення для тих, хто не знайомий із програмою Swift та iOS . Нижній рядок коду:

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

стосується лише IBOutlets, не IBActions.

Отже, якщо ваш додаток використовує кнопку як функцію для виконання якогось коду, скажімо відтворення музики, і ви хочете змінити заголовок Playна Pauseна основі змінної перемикання, вам також потрібно створити IBOutletдля цієї кнопки.

Якщо ви спробуєте використати button.setTitleпроти, IBActionви отримаєте помилку. Це очевидно, як тільки ви це знаєте, але для ноубів (ми всі були) це корисна порада.


1
Так, я збирався саме гугл, поки не побачив вашої відповіді. Дякую! +1
Evernoob

1
Це зразок в IOS, який знадобився мені час, щоб відкрити. Є атрибути елементів інтерфейсу, до яких ви не маєте доступу, якщо не буде створено IBOutlet. Якщо ви коли-небудь намагаєтеся змінити атрибут користувальницького інтерфейсу і не можете отримати до нього доступ, переконайтеся, що у вас є як IBAction, на якому працює якийсь код, так і IBOutlet, що забезпечує доступ до атрибутів.
Бендрікс

8
Ця відповідь не має сенсу. senderДії буде кнопка. Ви можете застосувати все, що завгодно sender. Для цього вам не потрібна розетка.
rmaddy

2
Ні відповідь Бендікса, ні його коментар не є правильними. Вони явно неправильні.
vikingosegundo

У цьому питанні не зазначається, що конструктор інтерфейсів настільки неправильно вважати, що так.
Едвард

13

Швидкий 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
Довелося користуватися UIControl.State. У ній сказано, що UIControlState була застаріла
HokiEJP

9

Швидкий 3:

Встановити назву кнопки:

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

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


6

Зміна назви при приписуванні дещо відрізняється:

Щойно я зіткнувся з проблемою: якщо у вас є UIButton з атрибутивним заголовком, ви повинні використовувати:

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

відповідно до документа Apple SetTitle :

Якщо для кнопки встановлено як заголовок, так і атрибутивний заголовок, кнопка вважає за краще використання атрибутивного заголовка над цією.

У мене був приписуваний заголовок, і я намагався встановити на нього титл, без ефекту ...


3

Швидкий 3

Коли ви робите @IBAction:

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

Це встановлює відправника як UIButton (замість Any), тому він орієнтується на btnAction як UIButton


2

стрімкий 4.2 та вище

за допомогою кнопки IBOutlet

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

за допомогою кнопки IBAction

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

0

Швидкий 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

Щоб встановити заголовок для кнопки в Xcode за допомогою swift - 04: спочатку створіть метод під назвою setTitle із заголовком параметра та станом UIController, як показано нижче;

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

}

і пригадайте цей метод у своєму методі дії кнопки типу;

yourButtonName.setTitle("String", for: .state)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.