Кто-нибудь может подсказать, как подчеркнуть название UIButton? У меня есть пользовательский UIButton, и я хочу, чтобы заголовок был подчеркнут, но Интерфейсный Разработчик не предоставляет никакой возможности сделать это.
В Интерфейсном Разработчике, когда вы выбираете опцию «Шрифт» для кнопки, он предоставляет возможность выбрать «Нет», «Одиночный», «Двойной», «Цвет», но ни один из них не обеспечивает никаких изменений в заголовке на кнопке.
Любая помощь приветствуется.
Ответы:
UIUnderlinedButton.h
UIUnderlinedButton.m
источник
drawRect
не вызывается при вращении. Это может быть решено путем установки перерисовки вашей кнопки следующим образом:myButton.contentMode = UIViewContentModeRedraw;
что заставляет кнопку перерисовывать при изменении границ.setTitle
метод следующим образом:objective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Чтобы использовать конструктор интерфейса для подчеркивания, необходимо:
Видео кто-то другой сделал https://www.youtube.com/watch?v=5-ZnV3jQd9I
источник
setTitle
с приписанным текстом. Для меня создание пользовательской кнопки для рисования подчеркивания немного экзотично (может быть, я все еще новичок в iOS, даже имея одно законченное приложение).Начиная с iOS6, теперь можно использовать NSAttributedString для выполнения подчеркивания (и любой другой поддержки атрибутных строк) гораздо более гибким способом:
Примечание: добавил это как еще один ответ - как совершенно другое решение по сравнению с моим предыдущим.
Изменить: как ни странно (по крайней мере в iOS8), вы должны подчеркнуть первый символ, иначе он не работает!
В качестве обходного пути установите первый символ, подчеркнутый чистым цветом!
источник
Вы можете сделать это в самом конструкторе интерфейсов.
источник
Это очень просто с приписанной строкой
Создает словарь с заданными атрибутами и применяется к приписанной строке. Затем вы можете установить атрибутивную строку как attibutedtitle в uibutton или attributext в uilabel.
источник
commentString
; ты скопировал из ответа @ NickH247?Вот моя функция, работает в Swift 1.2.
ОБНОВЛЕНИЕ Расширение Swift 3.0:
источник
Ответ Ника - отличный, быстрый способ сделать это.
Я добавил поддержку
drawRect
теней.Ответ Ника не учитывает, если под заголовком вашей кнопки есть тень под текстом:
Но вы можете переместить подчеркивание на высоту тени следующим образом:
Тогда вы получите что-то вроде этого:
источник
Для Swift 3 может использоваться следующее расширение:
источник
источник
Расширяя ответ @Nick H247, я столкнулся с проблемой, когда сначала подчеркивание не перерисовывалось при изменении размера кнопки при повороте; это можно решить, установив для вашей кнопки перерисовку следующим образом:
Это заставляет кнопку перерисовываться при изменении границ.
Во-вторых, исходный код предполагал, что у вас в кнопке была только 1 строка текста (моя кнопка оборачивается до 2 строк при вращении), а подчеркивание появляется только в последней строке текста. Код drawRect можно изменить, чтобы сначала рассчитать количество строк в кнопке, а затем поставить подчеркивание на каждой строке, а не только на нижней части, например:
Надеюсь, этот код поможет кому-то еще!
источник
В быстром
источник
Вы можете использовать этот код для добавления подчеркивания с интервалом в кнопке.
1 - Справочник разработчика интерфейса
2 - используя описанный код
источник
Версия Swift 5.0, которая работает с сентября 2019 года в Xcode 10.3:
Чтобы использовать его, сначала установите название кнопки,
button.setTitle("Button Title", for: .normal)
а затем вызовитеbutton.underlineText()
ее, чтобы подчеркнуть этот заголовок.источник
Как справится со случаем, когда мы будем держать нажатой подчеркнутую кнопку? В этом случае цвет текста кнопки изменяется в соответствии с выделенным цветом, но линия остается оригинального цвета. Допустим, если цвет текста кнопки в обычном состоянии черный, то ее подчеркивание также будет иметь черный цвет. Цвет подсветки кнопки - белый. Удерживая кнопку нажатой, цвет текста кнопки изменяется с черного на белый, но цвет подчеркивания остается черным.
источник
Я считаю, что это какая-то ошибка в редакторе шрифтов в XCode. Если вы используете конструктор интерфейса, вам нужно изменить заголовок с Обычный на Атрибут, откройте TextEdit, создайте подчеркнутый текст и скопируйте и вставьте его в текстовое поле в XCode
источник
Ник Н247 ответ, но Свифт подход:
источник
источник
Версия Swift 3 для ответа @ NickH247 с пользовательским цветом подчеркивания, шириной линии и пропуском :
источник