Сделайте одно слово из предложения в UIButton жирным шрифтом / подчеркнут (Swift) - PullRequest
0 голосов
/ 28 марта 2019

Я просто хочу выделить (или подчеркнуть) одно слово текстового предложения в UIButton программно в Swift.Я нигде не могу найти информацию, чтобы сделать это

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Я использую эти помощники для создания приписанных строк:

extension NSAttributedString {
    typealias Style = [Key: Any]
}

extension Array where Element == NSAttributedString {
    func joined() -> NSAttributedString {
        let mutable = NSMutableAttributedString()
        for element in self {
            mutable.append(element)
        }
        return mutable.copy() as! NSAttributedString
    }
}

extension String {
    func styled(_ style: NSAttributedString.Style = [:]) -> NSAttributedString {
        return NSAttributedString(string: self, attributes: style)
    }
}

Вот как их использовать для создания кнопки с частично подчеркнутым заголовком:

let rootView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
rootView.backgroundColor = .white

let button = UIButton(type: .roundedRect)
let title = [
    "Hello, ".styled(),
    "world!".styled([.underlineStyle: NSUnderlineStyle.single.rawValue])
    ].joined()
button.setAttributedTitle(title, for: .normal)
button.sizeToFit()
button.center = CGPoint(x: 100, y: 50)
rootView.addSubview(button)

import PlaygroundSupport
PlaygroundPage.current.liveView = rootView

Результат:

partially underlined button

0 голосов
/ 28 марта 2019

В этом примере я установил заголовок кнопки UIB «Платить дань» с подчеркнутым словом «дань» (наряду с различными другими украшениями):

    let mas = NSMutableAttributedString(string: "Pay Tribute", attributes: [
        .font: UIFont(name:"GillSans-Bold", size:16)!,
        .foregroundColor: UIColor.purple,
    ])
    mas.addAttributes([
        .strokeColor: UIColor.red,
        .strokeWidth: -2,
        .underlineStyle: NSUnderlineStyle.single.rawValue
    ], range: NSMakeRange(4, mas.length-4))
    self.button.setAttributedTitle(mas, for:.normal)
...