Изменение текста UIButton

102

Поэтому я пытаюсь обновить текст в UIButton, когда нажимаю на него. Я использую следующую строку для изменения текста:

calibrationButton.titleLabel.text = @"Calibration";

Я убедился, что текст меняется, но когда я запускаю приложение и нажимаю кнопку, он меняется на «Калибровка» на долю секунды, а затем возвращается к своему значению по умолчанию. Есть идеи, почему это может происходить? Есть ли какая-то функция обновления, которую мне нужно вызвать?

Джулиан Колтеа
источник
1
возможный дубликат текста заголовка заголовка iPhone UIButton?
dasblinkenlight

Ответы:

248

При компоновке своих подвидов UIButton устанавливает текстовое значение titleLabel, используя свои собственные значения заголовка, так что вы можете установить до четырех разных строк для четырех состояний (нормальный, выделенный, выбранный, отключенный).

Из-за этой функции установка текста titleLabel напрямую не будет сохраняться и будет сброшена кнопкой при размещении своих подвидов.

Это то, что вам нужно сделать, чтобы изменить текст заголовка для состояния кнопки.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Джесси Гампо
источник
4
так что же тогда button.titleLabel.text = @ "some text" должен делать?
Борис Гафуров
4
@BorisGafurov Если вы введете текст button.titleLabel, вы увидите, что titleLabel является свойством только для чтения, и поэтому любое свойство свойства, доступного только для чтения, также доступно только для чтения. Использование точечной нотации для их редактирования не сработает, поэтому вам нужны явные методы для их редактирования. По крайней мере, для меня это имеет смысл.
erdekhayser
1
Думаю, я потратил около двух часов, пока не осознал это (что, к сожалению, я уже знал!)
race_carr
Спасибо за Ваш ответ.
dinesharjani
3
@erdekhayser На самом деле свойства только для чтения МОГУТ иметь свойства чтения / записи. Я использую тег titlelabel для передачи целого числа методу действия. Также см. Ссылку на документы AppleAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Аарон,
6

программно вы можете установить заголовок кнопки, как показано ниже:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

вы также можете установить свойство заголовка кнопки из раскадровки.

bhautikmewada191
источник
2

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

Я заметил, что моя кнопка не показывает текст, который я добавил, используя методы, показанные здесь. Проверьте эту ссылку, чтобы убедиться, что вы предоставляете UIControlState, который хотите.

В чем разница между UIControlStateHighlighted и UIControlStateSelected?

user3429534
источник
1

Для Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)
Стивен Чен
источник
1

Для Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)
Сурадж Сонаване
источник
1

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

btn.setTitle("Some text", for:.normal)
Йохан Франзен
источник