ios swift: можно ли изменить стиль шрифта определенного слова в строке?

ios swift

14149 просмотра

3 ответа

842 Репутация автора

Я извлекаю из БД содержимое в виде строк. С помощью метода я извлекаю самое длинное слово из этой строки.

Теперь я хотел бы распечатать всю строку на текстовой метке, но хотел бы выделить самое длинное слово в другом цвете и стиле текста в строке.

Как я могу это сделать? Нужно ли разрезать строку на части - установить форматирование - и снова соединить их все вместе, прежде чем отдать на этикетку?

Или есть какой-то другой (лучший) способ?

Автор: user1555112 Источник Размещён: 20.03.2015 11:32

Ответы (3)


2 плюса

1858 Репутация автора

Вы хотите посмотреть на Attributed Strings и NSRange. Вы можете использовать оба из них вместе, чтобы создать различные стили для диапазонов в строке. Вот фрагмент:

myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])

//Add more attributes here:
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Chalkduster", size: 24.0), range: NSRange(location: 7,length: 5))
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "AmericanTypewriter-Bold", size: 18.0)!, range: NSRange(location:2,length:4))
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))

myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Georgia", size: 36.0)!, range: NSRange(location: 0, length: 1))
myMutableString.addAttribute(NSStrokeColorAttributeName, value: UIColor.blueColor(), range:  NSRange(location: 0, length: 1))
myMutableString.addAttribute(NSStrokeWidthAttributeName, value: 2, range: NSRange(location: 0, length: 1))

myMutableString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location: 0, length: myString.length))
myLabel.backgroundColor = UIColor.grayColor()

//Apply to the label
myLabel.attributedText = myMutableString
Автор: Chackle Размещён: 20.03.2015 11:34

0 плюса

4931 Репутация автора

NSMutableAttributedString.

Вы создаете NSMutableAttributedStringи применяете нужные эффекты addAttributes:range.

Затем назначьте его на attributedTextсобственность вашего UILabel.

Автор: Lord Zsolt Размещён: 20.03.2015 11:36

24 плюса

84596 Репутация автора

Решение

Если вы уже знаете самое длинное слово, вы должны получить диапазон этого слова в строке. Я предпочитаю метод NSString rangeOfString:для этого.

Затем вы создаете NSMutableAttributedStringиз строки атрибуты по умолчанию. Наконец, вы применяете атрибуты выделения к диапазону, который вы выяснили ранее.

let longString = "Lorem ipsum dolor. VeryLongWord ipsum foobar"
let longestWord = "VeryLongWord"

let longestWordRange = (longString as NSString).rangeOfString(longestWord)

let attributedString = NSMutableAttributedString(string: longString, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(20)])

attributedString.setAttributes([NSFontAttributeName : UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName : UIColor.redColor()], range: longestWordRange)


label.attributedText = attributedString

Который выглядит так на моей детской площадке:

введите описание изображения здесь

Автор: Matthias Bauch Размещён: 20.03.2015 11:41
Вопросы из категории :
32x32