У меня есть кнопка UIButton
, которая при нажатии вызывает новое представление, где пользователь может изменить некоторые настройки. Когда представление закрывается, я хотел бы обновить заголовок / текст, UIButton
чтобы отразить новое состояние. Я звоню:
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
Но, похоже, он никогда не отличается от исходного текста / заголовка, как указано в IB.
ios
iphone
uibutton
uicontrolstate
Джордж Армхолд
источник
источник
Ответы:
У вас есть кнопка, указанная как IBOutlet в вашем классе контроллера представления, и правильно ли она подключена как выход в Interface Builder (перетащите ctrl из нового выхода ссылки к владельцу файла и выберите свой объект UIButton)? Обычно это проблема, которая возникает у меня, когда я вижу эти симптомы.
Изменить: хотя здесь это не так, что-то подобное также может произойти, если вы установите присвоенный заголовок кнопке, а затем попытаетесь изменить заголовок, а не приписанный заголовок.
источник
Я решил проблему, просто установив параметр заголовка для UIControlStateNormal, и он автоматически работает с другими состояниями. Проблема, похоже, возникает, когда вы устанавливаете другой UIControlState.
источник
Начиная с Swift 4:
источник
Я обнаружил еще одну проблему. Возможно, это ошибка, появившаяся в iOS 5, но я подумал, что укажу на нее всем, кто с ней столкнется.
Если вы не установите текст по умолчанию для кнопки в XIB, текст никогда не появится, если вы установите его программно. И если вы установите текст в XIB, любой текст, который вы впоследствии назначите кнопке программно, будет усечен до размера текста по умолчанию.
И, наконец, если вы показываете представление с помощью кнопки, а затем вызываете другое представление (например, ActionSheet), а затем отклоняете его, текст, который вы назначили кнопке программно, будет удален, а заголовок кнопки вернется к тому, что вы установили вверх в XIB.
источник
Несмотря на то, что проблема с Caffeine Coma была решена, я хотел бы предложить еще одну потенциальную причину, по которой название не отображается в UIButton.
Если вы установите изображение для UIButton, используя
Он может закрывать заголовок. Я выяснил это на собственном горьком опыте и представляю, что некоторые из вас в конечном итоге прочитают эту страницу по той же причине.
Используйте этот метод вместо
для изображения кнопки и заголовка не будут затронуты.
Я тестировал это с программно созданными кнопками и кнопками, созданными в .xib
источник
для быстрого:
источник
Оказывается, документы говорят вам ответ! UIButton проигнорирует изменение заголовка, если он уже имеет атрибутную строку для использования (похоже, это значение по умолчанию, которое вы получаете при использовании построителя интерфейса Xcode).
Я использовал следующее:
источник
Еще одна возможная причина:
Если вы попытаетесь установить заголовок кнопки в
(id)initWithNibName: ...
методе, ваше свойство кнопки все равно будет равно нулю. Он еще не назначен UIButton.Вы должны быть уверены, что настраиваете свои кнопки таким методом, как
(void)viewWillLoad
или(void)viewWillAppear
, но вы, вероятно, не захотите устанавливать их так поздно(void)viewDidAppear
.источник
Иногда это может быть очень сложно. Самый простой способ - « обновить » вид кнопок!
источник
У меня продолжали возникать проблемы с этим, единственным решением было добавить изображение и метку в качестве подпредставлений в uibutton. Затем я обнаружил, что основная проблема заключалась в том, что я использовал UIButton с заголовком: Attributed. Когда я изменил его на Plain, достаточно установить titleLabel.text!
источник
@funroll абсолютно прав. Здесь вы можете увидеть, что вам понадобится. Убедитесь, что функция работает только в основном потоке . Если вы не хотите иметь дело с потоками, вы можете сделать это, например: создать NSUserDefaults и в ViewDidLoad условие проверки была нажата кнопка в другом представлении или нет (в другом представлении, установленном в NSUserDefaults, необходимая информация), и в зависимости от условий, установленных для необходимого заголовка для ваш UIButton, поэтому [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
источник
Убедитесь, что вы находитесь в основном потоке.
Если нет, он все равно сохранит текст кнопки. Он будет там, когда вы проверите объект в отладчике. Но на самом деле это не будет обновлять представление.
источник