2016-08-24 3 views
2

У меня есть этот код в моих руках:Как сделать полужирным часть NSMutableString?

if let text = trimText?.mutableCopy() as? NSMutableString { 
    text.insertString("\(prefix) ", atIndex: 0) 
    textStorage.replaceCharactersInRange(range, withString: text as String) 
} 

Когда я пытаюсь изменить мой text как:

text = attributedTextFunc(text) 

где

func attributedTextFunc(str: NSString) -> NSAttributedString { 

    var attributedString = NSMutableAttributedString(string: str as String, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(15.0)]) 

    let boldFontAttribute = [NSFontAttributeName: UIFont.boldSystemFontOfSize(15.0)] 

    attributedString.addAttributes(boldFontAttribute, range: str.rangeOfString("More")) 

    return attributedString 
} 

и я получаю эту ошибку:

Cannot assign value of type 'NSAttributedString' to type 'NSMutableString' 

Как я могу сделать это жирным шрифтом?

ответ

2

Вы не можете передать NSAttributedString текст. Это два разных типа.

Строка не подклассифицирована из NSAttributedString.

Вы должны установить:

attributedText = attributedTextFunc(text) 

Тогда, если вы хотите, чтобы представить его на UILabel

label.attributedText = attributedText 

UPDATE

Struct Строка ничего не знает о UIKit и полужирный стилей не знаю ,

NSAttributedString знает о UIKit и содержит все текстовые стили вы хотите

UPDATE 2

В вашем случае

ReadMoreTextView.attributedTrimText = attributedText 
+0

Я использую эту библиотеку https://github.com/ilyapuchka/ReadMoreTextView, и я хочу, чтобы изменить обрезанный цвет текста и сделайте его смелым. Но я не могу =/ – Doe

+0

Да, вы должны сделать это внутри этой библиотеки. – Konstantin

+0

@Doe Вы хотите сделать жирный текст «Подробнее»? –

0

Это происходит потому, что ваш text является тип NSMutableString и вашей функции attributedTextFunc - тип NSString.

Это проблема, поэтому просто замените ее на NSString на NSMutableString.

+0

NSMutableString - это подслой из NSString, проблема в NSAttributedString. NSAttributedString не является подклассом из NSString – Konstantin

2

Вы не можете переназначить text, потому что:

  • text постоянна (let)
  • text является NSMutableString, но attributedTextFunc возвращение NSAttributedString

Вы должны сохранять результат attributedTextFunc в переменной, как NSAttributeString и attributeText от UILabel ins TEAD из text

if let text = trimText?.mutableCopy() as? NSMutableString { 
    // ... 
    let attributeText = attributedTextFunc(text) 
    someLabel.attributeText = attributeText 
} 
0

Используйте этот код и передать обычную строку и Жирный String (которая необходима, чтобы быть выделен жирным шрифтом).

func attributeStrings(first: String, second : String) -> NSMutableAttributedString{ 
     let myNormalAttributedTitle = NSAttributedString(string: first, 
                 attributes: [NSFontAttributeName : UIFont.boldSystemFontOfSize(15)]) 
     let myAttributedTitle = NSAttributedString(string: second, 
                attributes: [NSForegroundColorAttributeName : UIColor.blackColor()]) 
     let result = NSMutableAttributedString() 
     result.appendAttributedString(myNormalAttributedTitle) 
     result.appendAttributedString(myAttributedTitle) 
     return result 
    } 

и присвоить возвращаемое значение этой функции

someLabel.attributeText = attributeStrings("My Name is", second : "Himanshu")