2014-11-29 3 views
2

사용자가 편집 한 특성 (예 : 굵게, 기울임 꼴, 밑줄)이 포함될 수있는 기존 NSAttributedString이 있습니다. 형식 속성을 유지하면서 기본 글꼴을 조지아에서 Helvetica로 변경할 수 있어야합니다. 과 같이 글꼴 설정, 모든 형식의 속성을 무시합니다 (즉, 조지아 굵게) : 나는 어떤 문자열에 각 속성의 범위를 넘는 열거 제안 different but related threads이, 글꼴 변경을 보았다NSAttributedString 서식 속성을 유지하면서 글꼴 변경

NSDictionary *fontFaceStyle = [[NSDictionary alloc] init]; 
fontFaceStyle = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:12.0]}; 
[combinedAttributedTextString setAttributes:fontFaceStyle range:NSMakeRange(0, combinedAttributedTextString.length)]; 

후 해당 서식 특성을 다시 적용 . 이것은 꽤 집중적 인 것처럼 보입니다. 여러 속성이있을 수있을 때 (예 : 굵게 및 기울임 꼴 및 밑줄) 어떻게 적용할지 모르겠습니다.

의견을 보내 주셔서 감사합니다.

+0

굵게와 기울임 꼴이'NSFontAttributedName'에 포함되어 있다는 점이 문제입니다. 밑줄을 추가하는 것이 문제가되지 않지만 글꼴은 그렇습니다. – Larme

답변

0

나는 똑같은 문제가있어서 열거가 잘 작동합니다. 여기서 "범위"는 작업하려는 범위이고 "newFamily"는 글꼴 모음입니다. textstorage를 사용하고 있는데, beginEditing()/endEditing()으로 전화를 걸 때이 편집 유형에 대한 유용한 정리를 수행한다고 가정합니다.

textStorage.beginEditing() 
textStorage.enumerateAttributes(in: range, options: [], using: { attr, attrRange, _ in 
    if let font = attr[NSFontAttributeName] as? NSFont { 
     let newFont = NSFontManager.shared().convert(font, toFamily: newFamily) 
     storage.addAttribute(NSFontAttributeName, value: newFont, range: attrRange) 
    } 
}) 
textStorage.endEditing() 
+0

질문은 IOS 태그가 지정됩니다. 'NSFontManager' 클래스는 macOS에서만 사용할 수 있습니다. – rmaddy