2015-08-19 2 views
2

Я пытаюсь добавить несколько атрибутов в NSMutableAttributedString; я попытался это:Добавить несколько атрибутов в NSMutableAttributedString

let stringNumero: NSString = "\(squadra.cori.count)" //= two-digit number 
var stringNumeroMutable = NSMutableAttributedString() 
stringNumeroMutable = NSMutableAttributedString(string: stringNumero as! String, attributes: [NSFontAttributeName: UIFont(name: "Noteworthy-Light", size: 9)!, 
                            NSForegroundColorAttributeName: UIColor(red: 110/255.0, green: 183/255.0, blue: 93/255.0, alpha: 1.0)]) 
cell.numeroCori.attributedText = stringNumeroMutable 

теперь я хотел бы добавить другие атрибуты и я буду УСО этот код:

stringNumeroMutable.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFontOfSize(8), range: NSRange(location: 0, length: 1)) 

но я подвергаясь в задаче:

enter image description here

Как вы видите, смелый эффект приписывается только первой цифре, а предыдущие атрибуты (такие как шрифт) исчезают. Я думаю, что второе NSFontAttributedName подписывается на предыдущий, так есть ли способ установить шрифт и полужирный? Спасибо большое !!!

Edit: как это было предложено я попытался вспомнить метод как это:

let stringNumero: NSString = "\(squadra.cori.count)" //= two-digit number 
var stringNumeroMutable = NSMutableAttributedString() 
stringNumeroMutable = NSMutableAttributedString(string: stringNumero as! String, attributes: [NSFontAttributeName: UIFont(name: "Noteworthy-Light", size: 9)!, 
                            NSForegroundColorAttributeName: UIColor(red: 110/255.0, green: 183/255.0, blue: 93/255.0, alpha: 1.0)]) 
cell.numeroCori.attributedText = stringNumeroMutable 

stringNumeroMutable.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFontOfSize(9), range: NSRange(location: 0, length: stringNumeroMutable.length)) 

cell.numeroCori.atributedText = stringNumeroMutable 

, но второй вызов перезаписать первый (так что число потерять приписываемую шрифт). Как это решить?

enter image description here

+0

Я думаю, вам нужно установить «длина» на 2 –

+0

@ ТихоновАлександр, если я установил длину до 2, приложение вылетает с индексом вне диапазона. -Я не знаю, как это можно установить ... –

+0

Собственно, после второго вызова 'stringNumeroMutable.addAttribute' вам нужно снова установить' cell.numeroCori.attributedText = stringNumeroMutable'. И insted из 'NSRange (location: 0, length: 1)' вы должны использовать 'NSRange (location: 0, length: stringNumeroMutable.length)' –

ответ

1

Я думаю, ваша проблема, что используется метод boldSystemFontOfSize

boldSystemFontOfSize:

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

Смотрите мое решение:

@IBOutlet weak var label: UILabel! 
var mutableAttributedString: NSMutableAttributedString! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    let someString = "Hello World" 
    let attr: [String: AnyObject] = [NSFontAttributeName: UIFont(name: "Helvetica", size: 10)!, 
     NSForegroundColorAttributeName: UIColor(red: 0.18, green: 0.18, blue: 0.18, alpha: 1.0)] 
    mutableAttributedString = NSMutableAttributedString(string: someString, attributes: attr) 
    label.attributedText = mutableAttributedString 
} 

@IBAction func buttonPressed(sender: UIButton) { 
    let font = mutableAttributedString.attribute(NSFontAttributeName, atIndex: 1, effectiveRange: nil)! 
    mutableAttributedString.addAttribute(NSFontAttributeName, value: font.fontWithSize(20) , range: NSMakeRange(0, mutableAttributedString.length)) 
    label.attributedText = mutableAttributedString 
} 

В buttonPressed функции можно определить текущий шрифт mutableAttributedString, а затем вы можете изменить размер шрифта с помощью метода fontWithSize.

+0

Прости за мой запоздалый ответ! Я видел ваше решение, и оно работает, но нет ли способа сделать жирный шрифт или mutableString? –

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