Изменение текста UIButton программно быстро

222

Простой вопрос здесь. У меня есть UIButton, currencySelector, и я хочу программно изменить текст. Вот что у меня есть:

currencySelector.text = "foobar"

Xcode выдает мне ошибку «Ожидаемая декларация». Что я делаю не так, и как я могу изменить текст кнопки?

rocket101
источник

Ответы:

595

В Свифте 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
Мэтью П. Джонс
1
Swift3: self.btnBuy.setTitle («Buy», для: UIControlState.normal)
Thiru
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вы получите ошибку. Это очевидно, когда вы это знаете, но для новичков (мы все были) это полезный совет.

Bendrix
источник
1
Да, я собирался гуглить именно это, пока не увидел ваш ответ. Спасибо! +1
Evernoob
1
Это паттерн в IOS, который занял у меня некоторое время, чтобы обнаружить. Есть атрибуты элементов пользовательского интерфейса, к которым у вас нет доступа, пока не создан IBOutlet. Если вы когда-либо пытаетесь изменить атрибут пользовательского интерфейса и не можете получить к нему доступ, убедитесь, что у вас есть как IBAction, на котором выполняется некоторый код, так и IBOutlet, который предоставляет доступ к атрибутам.
Бендрикс
8
Этот ответ не имеет смысла. senderДействия будет кнопка. Вы можете применять все, что пожелаете sender. Вам не нужен выход для этого.
rmaddy
2
Ни ответ Бендикса, ни его комментарий не верны. Они совершенно не правы.
Викингосегунд
В вопросе не упоминается конструктор интерфейса, поэтому неправильно полагать, что это так.
Эдвард
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)
Бхавин Рамани
источник
9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)
Тайлер Ратт
источник
6

Изменение заголовка при его присвоении немного отличается:

Я только что столкнулся с проблемой: если у вас есть UIButton с атрибутом заголовка, вы должны использовать:

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

согласно Apple SetTitle Doc :

Если для кнопки установить заголовок и присвоенный заголовок, кнопка предпочитает использовать присвоенный заголовок над этим.

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

Кристиан Навелот
источник
3

Свифт 3

Когда вы делаете @IBAction:

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

Это устанавливает отправителя как UIButton (вместо Any), поэтому он нацелен на btnAction как UIButton

gustavoanalytics
источник
2

Swift 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 с параметром title и состоянием UIController, как показано ниже;

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

}

и вызовите этот метод в вашем методе действия кнопки как;

yourButtonName.setTitle("String", for: .state)
Ясани Хардик
источник