iPhone: как отобразить подчеркнутый текст в кнопке? - PullRequest
13 голосов
/ 15 апреля 2010

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

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

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

Есть ли другой способ получить желаемую внешность и поведение?

Ответы [ 9 ]

38 голосов
/ 28 января 2016

Добавление скриншота для ответа @ Haider.

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

enter image description here

В конце концов, я все равно подчеркнул это в коде, просто потому, что по какой-то причине я не смог заставить Bold работать совместно с Underline. Возможно, из-за шрифта, который я использовал, кто знает.

@IBOutlet weak var underlineButton: UIButton! {
    didSet {
        let attrs = [
            NSFontAttributeName : UIFont(name: "MyCustomFont-Bold", size: 19.0)!,
            NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue,
            NSForegroundColorAttributeName : UIColor.orangeColor()
        ]
        let attrString = NSMutableAttributedString(string: "Button text", attributes:attrs)
        underlineButton.setAttributedTitle(attrString, forState: .Normal)
    }
}
8 голосов
/ 13 октября 2015

Для этого в конструкторе интерфейсов

  1. Нажмите на кнопку / ярлык
  2. В инспекторе Атрибутов измените Заголовок / Текст на Атрибут с простого
  3. Выберите текст, который вы хотите показать.
  4. Щелкните правой кнопкой мыши на нем Перейти к шрифту-> Подчеркнуть
6 голосов
/ 17 мая 2014

Свифт 3,2

if let title = button.titleLabel?.text, title != "" {

    let attributeString = NSMutableAttributedString(string: title)

    attributeString.addAttribute(NSAttributedStringKey.underlineStyle, value: 1, range: NSMakeRange(0, title.count))

    button.titleLabel?.attributedText = attributeString
}

Цель C

NSString *tem = self.myButton.titleLabel.text;

if (tem != nil && ![tem isEqualToString:@""]) {
    NSMutableAttributedString *temString=[[NSMutableAttributedString alloc]initWithString:tem];
    [temString addAttribute:NSUnderlineStyleAttributeName
                      value:[NSNumber numberWithInt:1]
                      range:(NSRange){0,[temString length]}];

    self.myButton.titleLabel.attributedText = temString;
}
4 голосов
/ 20 ноября 2014

Начиная с iOS 6.0, вы можете использовать NSAttributedString с UIButton.

//create an underlined attributed string
NSAttributedString *titleString = [[NSAttributedString alloc] initWithString:@"Title" attributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid)}];

//use the setAttributedTitle method
[yourButton setAttributedTitle:titleString forState:UIControlStateNormal];
3 голосов
/ 15 апреля 2010

Другая альтернатива - установить изображение для кнопки. Создайте изображение, которое отображает соответствующий текст, и кнопка будет отображать это вместо текста.

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

3 голосов
/ 15 апреля 2010

Чтобы сделать то, что вы хотите, вам нужно использовать CGContextStrokePath (), чтобы нарисовать подчеркивание на CGLayer UILabel.

При этом я бы попросил вас пересмотреть свой выбор дизайна. Создание текста кнопки в виде гиперссылки будет иметь смысл для настольного приложения Windows (например, с использованием LinkLabel). Тем не менее, iPhone OS имеет другой набор соглашений пользовательского интерфейса из-за его меньшего экрана и необходимости больших целей для размещения сенсорного ввода.

Подход «Cocoa Touch» к этой проблеме будет состоять в отображении списка идентификаторов почты с использованием UITableView. Предоставьте каждой строке соответствующую вспомогательную кнопку. Например, вы можете использовать UITableViewCellAccessoryDetailDisclosureButton или UIButton с buttonType из UIButtonTypeContactAdd). Затем обработчик события кнопки аксессуара вызовет почтовый композитор.

Удачи и удачного кодирования!

1 голос
/ 26 апреля 2018

Благодаря ответу @Robert Chen, Обновление до swift 4.1

let btn = UIButton(type: .system)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 100)

let attrs = NSAttributedString(string: "➟ More",
               attributes:
[NSAttributedStringKey.foregroundColor: UIColor(red:0.20, green:1.00, blue:1.00, alpha:1.0),
 NSAttributedStringKey.font: UIFont.systemFont(ofSize: 19.0),
 NSAttributedStringKey.underlineColor: UIColor(red:0.20, green:1.00, blue:1.00, alpha:1.0),
 NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])

btn.setAttributedTitle(attrs, for: .normal)

enter image description here

1 голос
/ 03 ноября 2011

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

0 голосов
/ 29 мая 2010

Так что, если вы хотите предоставить ссылку на сайт в текстовом блоке? Пользователю понадобится какая-то визуальная индикация, что текст представляет собой ссылку и куда-то их возьмет.

Гиперсселенный вид, подчеркнутый синим, - это ожидаемая норма, но понимаю, что это ПК. Так что же такое iPhone?

В прошлом я использовал пользовательскую кнопку без фона и т. Д. И с синим текстом, хотя он не подчеркивался, он допускает возможность вставки текста.

Было бы интересно узнать, что делают другие ....

...