2015-11-30 4 views
0

Я пытаюсь выделить полужирный текст в UITextView. Вот код, я использую (хотя я упростил текст):Полужирная часть текста в UITextView в Swift с использованием NSMutableAttributedString

@IBOutlet weak var textview: UITextView! 

/*...*/ 

var str : NSMutableAttributedString = NSMutableAttributedString(string:"this is a test", attributes: [NSFontAttributeName:textview.font!]) 
str.addAttribute(NSFontAttributeName, value: UIFont(name: "GillSans-Bold", size: 16)!, range: NSMakeRange(10, 4)) 
textview.attributedText = str 

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

Извините, если это дубликат, я нашел много сообщений, говорящих о том, чтобы текст был выделен жирным шрифтом в uitextview, некоторые использовали эту технику, но ни у кого не было проблем с ней, насколько я знаю. Я что-то пропустил? Я что-то читал неправильно?

Заранее спасибо.

+0

Если вы применяете 'GillSans-Bold' в первой строке, это работает? – Larme

+0

Журнал 'str'. Он показывает, что вы ожидаете? – rmaddy

+0

Я не могу воспроизвести ошибку, она [работает для меня] (https://www.evernote.com/l/AFnpjPXt7tRLapGLwpHqE5TsGiNRUzdoH9Y) на игровой площадке. – Moritz

ответ

-1

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

//credits to Chris: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/#includefonts 
func printFontFamilyNames(){ 

    for family: String in UIFont.familyNames() 
    { 
     print("\(family)") 
     for names: String in UIFont.fontNamesForFamilyName(family) 
     { 
      print("== \(names)") 
     } 
    } 

} 

Это не может прямо ответить на ваш вопрос, но я уверен, что вы найдете ее полезной. А также проверьте ссылку в верхней части этого блока кода, из которой я извлек эту функцию.

UPDATE

Вот кусок кода, который я написал, что правильно изменяет шрифт приписываемых строк в пределах UILabel:

if let terms = self.terms { 

     let text = NSMutableAttributedString(string: terms.text!) 

     let textAsString = text.string as NSString 
     let range = NSMakeRange(0, textAsString.length) 

     textAsString.enumerateSubstringsInRange(range, options: NSStringEnumerationOptions.ByWords, usingBlock: { (substring, substringRange, enclosingRange, _) ->() in 

      if ["Create", "Account", "Terms", "of", "Service", "Privacy", "policy"].contains(substring!) { 

       if let font = UIFont(name: "OpenSans-Semibold", size: 11) { 

        text.addAttribute(NSFontAttributeName, value: font, range: substringRange) 

       } else { 

        Services.log("Invalid font") 

       } 

      } 

      //... 

     }) 

     terms.attributedText = text 

    } 

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

+0

«GillSans-Bold» - правильное имя, это не ошибка OP. – Moritz

+0

Имя шрифта верное, я использовал его для других вещей:/(также код, который вы скопировали, не работает для меня, он говорит мне, что он «не может вызывать имена семейства без аргументов», но функция действительно не требует аргументов поэтому я не понимаю проблемы ... есть ли что-то, что мне нужно сделать, прежде чем называть его?) – Lyra

+0

@Lyra Пример кода от Armin работает, я просто тестировался на игровой площадке. Вы уверены, что используете текущую версию Xcode? – Moritz

Смежные вопросы