2016-12-06 19 views
1

Существует ли способ добавления NSMutableAttributedString в пределах обычной строки?NSMutableAttributedString для добавления индекса (надстрочный индекс) для NSTextView из строки

Я хотел бы добавить текст в NSTextView. Этот конкретный текст (String) имеет ссылки на переменные Double(), и я хотел бы добавить некоторые верхние и нижние индексы (индекс и надстрочный индекс).

Это математическое программное обеспечение для инженеров-строителей, а выход - большой текст с несколькими строками, и я хотел бы знать, если существует более простой или прямой способ добавления этих индексов (A = 5 м2 (квадрат квадратов)).

Я не могу форсировать числовые символы шрифта (⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ₀ ₈ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉ ₉-----)/верхний индекс.

Я хотел бы знать, существует ли способ создания такой атрибутной строки и добавления в контейнер текста.

PS: Я проверил уже эти ответы (Swift 3.0 convert Double() to NSMutableAttributedString), но у меня есть проблемы, чтобы использовать его в строки со ссылками, как в этом примере:

var x = Double() 
var y = Double() 
var z = Double() 
x = 10 
y = 5 

z = x * y // = 50 
var str = String() 
str = "Random text for example porpoises:\n\nHere comes calculation part\n\nA1 = \(z) m2" 

print(str) 
//Random text for example porpoises: 
// 
//Here comes calculation part 
// 
//A1 = 50 m2 

//"1" in "A1" should be subscripted (A_1) 
//"2" in "m2" should be superscripted (m^2) 

Я хотел бы знать, как я могу добавить их к югу и верхние индексы и поместите эту атрибутивную строку в NSTextView

ответ

3

Я бы предложил использовать стандартные NSAttributedString и NSBaselineOffsetAttributeName. Посмотрите на пример, я просто положить вместе:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let label = NSTextView(frame: CGRect(x: 20, y: 20, width: 100, height: 30)) 
    let str = "A1 = 50 m2" 

    let aString = NSMutableAttributedString(string: str) 

    let myFont = NSFont(name: label.font!.fontName, size: 10.0) 
    let subscriptAttributes: [String : Any] = [ NSBaselineOffsetAttributeName: -5, NSFontAttributeName: myFont! ] 
    let superscriptAttributes: [String : Any] = [ NSBaselineOffsetAttributeName: 5, NSFontAttributeName: myFont! ] 

    aString.addAttributes(subscriptAttributes, range: NSRange(location: 1, length: 1)) 
    aString.addAttributes(superscriptAttributes, range: NSRange(location: 9, length: 1)) 

    // Kerning adds a little spacing between all the characters. 
    aString.addAttribute(NSKernAttributeName, value: 1.5, range: NSRange(location: 0, length: 2)) 
    aString.addAttribute(NSKernAttributeName, value: 1.5, range: NSRange(location: 8, length: 2)) 


    label.textStorage?.append(aString) 

    view.addSubview(label) 
} 

Вот результат:

enter image description here

+0

UILabel и UIFont? Это вопрос какао. –

+0

Неужели это трудно перевести? Я проделал всю тяжелую работу. – toddg

+0

Благодарим вас за помощь. Я не мог найти никакого учебника или ничего о том, как добавить значение String в NSMutableAtributedString, но ваш ответ дал мне достаточно идей и решений. Еще раз спасибо. –