Как вы используете NSAttributedString? - PullRequest
305 голосов
/ 14 августа 2010

Несколько цветов в NSString или NSMutableStrings невозможны.Так что я немного слышал о NSAttributedString, который был представлен с iPad SDK 3.2 (или около 3.2) и доступен на iPhone какиз iPhone SDK 4.0 beta .

Я хотел бы иметь строку, имеющую три цвета.

Причина, по которой я не использую 3 отдельных строки NSS, заключается в том, чтодлина каждой из трех NSAttributedString подстрок часто меняется, и поэтому я бы предпочел не использовать какие-либо вычисления для изменения положения 3 отдельных NSString объектов.

Если это возможно с использованием NSAttributedString, как мне это сделать?сделайте следующее - (если это невозможно с NSAttributed string, как бы вы это сделали):

alt text

Редактировать: Помните, @"first", @"second"и @"third" будет заменено другими строками в любое время.Поэтому использование жестко закодированных значений NSRange не сработает.

Ответы [ 15 ]

2 голосов
/ 13 мая 2015

Вы можете загрузить атрибутивную строку HTML в Swift следующим образом

   var Str = NSAttributedString(
   data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true),
   options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
   documentAttributes: nil,
   error: nil)

   label.attributedText = Str  

Чтобы загрузить html из файла

   if let rtf = NSBundle.mainBundle().URLForResource("rtfdoc", withExtension: "rtf", subdirectory: nil, localization: nil) {

   let attributedString = NSAttributedString(fileURL: rtf, options: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType], documentAttributes: nil, error: nil)
        textView.attributedText = attributedString
        textView.editable = false
    }

http://sketchytech.blogspot.in/2013/11/creating-nsattributedstring-from-html.html

И установить строку в соответствии с вашим обязательным атрибутом .... следуйте этому ..
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift/

1 голос
/ 07 января 2016
- (void)changeColorWithString:(UILabel *)uilabel stringToReplace:(NSString *) stringToReplace uiColor:(UIColor *) uiColor{
    NSMutableAttributedString *text =
    [[NSMutableAttributedString alloc]
     initWithAttributedString: uilabel.attributedText];

    [text addAttribute: NSForegroundColorAttributeName value:uiColor range:[uilabel.text rangeOfString:stringToReplace]];

    [uilabel setAttributedText: text];

}
0 голосов
/ 02 сентября 2018

Супер простой способ сделать это.

let text = "This is a colorful attributed string"
let attributedText = 
NSMutableAttributedString.getAttributedString(fromString: text)
attributedText.apply(color: .red, subString: "This")
//Apply yellow color on range
attributedText.apply(color: .yellow, onRange: NSMakeRange(5, 4))

Для более подробной информации нажмите здесь;https://github.com/iOSTechHub/AttributedString

0 голосов
/ 09 февраля 2018

Swift 4

let combination = NSMutableAttributedString()

var part1 = NSMutableAttributedString()
var part2 = NSMutableAttributedString()
var part3 = NSMutableAttributedString()

let attrRegular = [NSAttributedStringKey.font : UIFont(name: "Palatino-Roman", size: 15)]

let attrBold:Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15)]

let attrBoldWithColor: Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15),
                                 NSAttributedStringKey.foregroundColor: UIColor.red]

if let regular = attrRegular as? [NSAttributedStringKey : NSObject]{
    part1 = NSMutableAttributedString(string: "first", attributes: regular)

}
if let bold = attrRegular as? [NSAttributedStringKey : NSObject]{
    part2 = NSMutableAttributedString(string: "second", attributes: bold)
}

if let boldWithColor = attrBoldWithColor as? [NSAttributedStringKey : NSObject]{
    part3 = NSMutableAttributedString(string: "third", attributes: boldWithColor)
}

combination.append(part1)
combination.append(part2)
combination.append(part3)

Список атрибутов смотрите здесь NSAttributedStringKey в Apple Docs

0 голосов
/ 22 февраля 2017

Для решения такого рода проблем я создал библиотеку в swift, которая называется Atributika.

let str = "<r>first</r><g>second</g><b>third</b>".style(tags:
        Style("r").foregroundColor(.red),
        Style("g").foregroundColor(.green),
        Style("b").foregroundColor(.blue)).attributedString

label.attributedText = str

Вы можете найти ее здесь https://github.com/psharanda/Atributika

...