4

シンプルな HTML を NSTextView にロードしています。既に NSTextView のフォント属性を設定していますが、HTML の読み込みではこれらのフォントが無視され、既定値は常に 'Times-Roman 12 size' になります。現在、属性を列挙してフォントサイズを設定しています。しかし、サイズを変更するためだけにこれを行うには費用がかかります。これが唯一の方法ですか?より良い方法はありますか?

HTML:

<p>This is just a <b>title</b></p>

HTML を NSTextView にロードし、その後のフォントサイズの変更:

    NSData *valueInDataFormat = [bodyContent dataUsingEncoding:NSUTF8StringEncoding];
    NSAttributedString *textToBeInserted = [[NSAttributedString alloc] initWithHTML:valueInDataFormat documentAttributes:nil];

    NSDictionary *rtfTextAttributes = [self defaultTextAttributesFor:RTFText];
    //inserttext mimic what user do; so it takes the typingattributes
    //ref: http://www.cocoabuilder.com/archive/cocoa/113938-setting-default-font-of-an-nstextview.html#114071
    [entryContent setString:@""];
    [entryContent setTypingAttributes:rtfTextAttributes];
    [entryContent insertText:textToBeInserted];

    //now change font size
            NSTextStorage *content = [entryContent textStorage];
            [content beginEditing];
            NSRange totalRange = NSMakeRange (0, content.length);

            [content enumerateAttributesInRange: totalRange
                                                 options: 0
                                              usingBlock: ^(NSDictionary *attributes, NSRange range, BOOL *stop) {
                                                  NSLog (@"range: %@  attributes: %@",
                                                         NSStringFromRange(range), attributes);

                                                  NSFont *font = [attributes objectForKey:NSFontAttributeName];
                                                  if (font){
                                                      [content removeAttribute:NSFontAttributeName range:range];
                                                      font = [[NSFontManager sharedFontManager] convertFont:font toSize:[font pointSize] + 3];
                                                      [content addAttribute:NSFontAttributeName value:font range:range];
                                                  }
                                              }];
            [content endEditing];
            [entryContent didChangeText];
4

2 に答える 2

3

最近、この問題に遭遇しました。最終的に<style>、HTML コンテンツの前にブロックを使用font-familyして、システムのデフォルトに設定できることがわかりました。これはうまく機能し、システム フォントを使用しながら、HTML で太字と斜体のすべての属性を記述することができます。

NSString* bodyContent = @"<p>This is just a <b>title</b></p>";

NSMutableString *htmlContent = [NSMutableString string];
[html appendString: @"<style>body { font-family: "];
[html appendString: [[NSFont systemFontOfSize: 12] fontName]];
[html appendString: @"; }</style>"];
[html appendString: bodyContent];

NSData *htmlData = [htmlContent dataUsingEncoding:NSUTF8StringEncoding];
NSAttributedString *html = [[NSAttributedString alloc] initWithHTML: htmlDescriptionData baseURL: NULL documentAttributes: NULL];

これにはもっとエレガントな解決策があるかもしれませんが、まだ見つけていません。

于 2013-05-07T22:04:10.377 に答える