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


222

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

currencySelector.text = "foobar"

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

Ответы:


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вы получите ошибку. Это очевидно, когда вы это знаете, но для новичков (мы все были) это полезный совет.


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)


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


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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.