Жирный и не жирный текст в одном UILabel? - PullRequest
238 голосов
/ 27 августа 2010

Как было бы возможно включить как жирный, так и не жирный текст в uiLabel?

Я бы предпочел не использовать UIWebView. Я также читал, что это возможно при использовании NSAttributedString, но я не знаю, как его использовать. Есть идеи?

Apple достигает этого в нескольких своих приложениях; Примеры Скриншот: link text

Спасибо! - Дом

Ответы [ 14 ]

2 голосов
/ 23 марта 2018

Swift 4:

// attribute with color red and Bold
var attrs1 = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 20), NSAttributedStringKey.foregroundColor: UIColor.red]

// attribute with color black and Non Bold
var attrs2 = [NSAttributedStringKey.font: UIFont(name: "Roboto-Regular", size: 20), NSAttributedStringKey.foregroundColor: UIColor.black]  

var color1 = NSAttributedString(string: "RED", attributes: attrs1)

var color2 = NSAttributedString(string: " BLACK", attributes: attrs2)

var string = NSMutableAttributedString()

string.append(color1)

string.append(color2)

// print the text with **RED** BLACK
print("Final String : \(string)")
2 голосов
/ 22 февраля 2018

Надеюсь, что это будет соответствовать вашим потребностям. Введите строку для обработки в качестве входных данных и укажите слова, которые должны быть выделены жирным шрифтом / цветом в качестве входных данных.

func attributedString(parentString:String, arrayOfStringToProcess:[String], color:UIColor) -> NSAttributedString
{
    let parentAttributedString = NSMutableAttributedString(string:parentString, attributes:nil)
    let parentStringWords = parentAttributedString.string.components(separatedBy: " ")
    if parentStringWords.count != 0
    {
        let wordSearchArray = arrayOfStringToProcess.filter { inputArrayIndex in
            parentStringWords.contains(where: { $0 == inputArrayIndex }
            )}
        for eachWord in wordSearchArray
        {
            parentString.enumerateSubstrings(in: parentString.startIndex..<parentString.endIndex, options: .byWords)
            {
                (substring, substringRange, _, _) in
                if substring == eachWord
                {
                    parentAttributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 15), range: NSRange(substringRange, in: parentString))
                    parentAttributedString.addAttribute(.foregroundColor, value: color, range: NSRange(substringRange, in: parentString))
                }
            }
        }
    }
    return parentAttributedString
}

Спасибо. Счастливого кодирования.

1 голос
/ 22 июня 2016

Нет необходимости в NSRange со следующим кодом, который я только что реализовал в своем проекте (в Swift):

    //Code sets label (yourLabel)'s text to "Tap and hold(BOLD) button to start recording."
    let boldAttribute = [
        //You can add as many attributes as you want here.
        NSFontAttributeName: UIFont(name: "HelveticaNeue-Bold", size: 18.0)!]

    let regularAttribute = [
        NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 18.0)!]

    let beginningAttributedString = NSAttributedString(string: "Tap and ", attributes: regularAttribute )
    let boldAttributedString = NSAttributedString(string: "hold ", attributes: boldAttribute)
    let endAttributedString = NSAttributedString(string: "button to start recording.", attributes: regularAttribute )
    let fullString =  NSMutableAttributedString()

    fullString.appendAttributedString(beginningAttributedString)
    fullString.appendAttributedString(boldAttributedString)
    fullString.appendAttributedString(endAttributedString)

    yourLabel.attributedText = fullString
0 голосов
/ 03 сентября 2014

Если вы хотите сделать использование приписанных строк проще, попробуйте использовать Attributed String Creator, который сгенерирует код для вас. https://itunes.apple.com/us/app/attributed-string-creator/id730928349

...