16

NSTextView で強調表示された段落をうまく表示しようとしています。現在、背景色で NSAttributedString を作成することでこれを行っています。簡単なコードを次に示します。

NSDictionary *attributes = @{NSBackgroundColorAttributeName:NSColor.greenColor};
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Here is a single line of text with single spacing" attributes:attributes];

[textView.textStorage setAttributedString:attrString];

このアプローチは、強調表示されたテキストを生成するという点で、基本的に機能します。

シングルラインシングルスペース

残念ながら、複数の行が存在する場合、ハイライトは行自体に加えて行間の垂直方向のスペース覆い、見苦しくなります。

複数行のダブルスペーステキスト

Cocoa でこの種の強調表示を行う方法を知っている人はいますか? 下の写真は基本的に私が探しているものです (白いボックスの影は無視してください):

ホワイトアウトテキスト

CoreText や html など、見栄えをよくするために必要なものは何でも喜んで使用します。

4

3 に答える 3

3

NSLayoutManager をサブクラス化し、オーバーライドする必要があります。

- (void)fillBackgroundRectArray:(const CGRect *)rectArray
                      count:(NSUInteger)rectCount
          forCharacterRange:(NSRange)charRange
                      color:(UIColor *)color;

これは、背景色の四角形を描画する基本的な方法です。

于 2016-03-28T00:05:57.050 に答える
0

これを試して:-

     -(IBAction)chooseOnlylines:(id)sender
{

 NSString *allTheText =[tv string];
    NSArray *lines = [allTheText componentsSeparatedByString:@"\n"];
    NSString *str=[[NSString alloc]init];
    NSMutableAttributedString *attr;
    BOOL isNext=YES;
    [tv setString:@""];
    for (str in lines)
    {
        attr=[[NSMutableAttributedString alloc]initWithString:str];
        if ([str length] > 0)
        {

        NSRange range=NSMakeRange(0, [str length]);
        [attr addAttribute:NSBackgroundColorAttributeName value:[NSColor greenColor] range:range];
        [tv .textStorage appendAttributedString:attr];
            isNext=YES;
        }
        else
        {
            NSString *str=@"\n";
            NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str];
            [tv .textStorage appendAttributedString:attr];
            isNext=NO;
        }
        if (isNext==YES)
        {
            NSString *str=@"\n";
            NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str];
            [tv .textStorage appendAttributedString:attr];

        }
     }
}
于 2013-09-23T16:07:44.127 に答える