Зміна тексту UIButton


102

Тому я намагаюся оновити текст на UIButton, коли натискаю на нього. Я використовую наступний рядок для зміни тексту:

calibrationButton.titleLabel.text = @"Calibration";

Я перевірив, що текст змінюється, але коли я запускаю додаток і натискаю кнопку, він на частку секунди змінюється на "Калібрування", а потім повертається до свого значення за замовчуванням. Будь-які ідеї, чому це може статися? Чи є якась функція оновлення, яку мені потрібно дзвонити?


1
можливий дублікат тексту iPhone UIButton TitleLabel?
dasblinkenlight

Відповіді:


248

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

Через цю функцію, встановлення тексту заголовка теги безпосередньо не збережеться, і буде скинуто кнопкою, коли вона викладе свої підпогляди.

Це те, що ви повинні зробити, щоб змінити текст заголовка для стану кнопки.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
так, що button.titleLabel.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:
Аарон

35

Щоб встановити текст кнопки, використовуйте наступний метод:

[calibrationButton setTitle: @"Calibration" forState: UIControlStateNormal];

Детальнішу інформацію див. У довідці про UIButtonклас ... http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html

Або у Swift 3:

calibrationButton.setTitle("Calibration", for: .normal)

6

програмно ви можете встановити назву кнопки, як показано нижче:

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

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


2

Не дуже багато, і, можливо, очевидно, але для кнопок доступні кілька станів. Якщо ви надасте "неправильний", ви не побачите зміни тексту за бажанням.

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

Яка різниця між UIControlStateHighlified та UIControlStateSelected?


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.