MacOS NSTextView实现富文本协议点击

NSTextView 设置富文本,不能直接使用attributedString,需要通过textStorage去实现。

即:

富文本    

NSMutableAttributedString*abs=[[NSMutableAttributedString alloc]initWithString:str];

//定义的富文本协议,后续代理中触发

NSArray *agreementArr=@[@"a://",@"b://"];//自定义的协议,比如a://协议是跳转客服,b://协议是打开网页

    for(int i =0;i

        if(rangeArr.count>i) {

            //协议对应位置

            NSRange range=[rangeArr[i] rangeValue];

            //添加上面的协议到文本的对应区域

            [abs addAttribute:NSLinkAttributeName

                                     value:agreementArr[i]

                                     range:range];

            //下划线类型

            [abs addAttribute:NSUnderlineStyleAttributeName

                                     value:@(NSUnderlineStyleNone)

                                      range:range];

            //下划线颜色

            [abs addAttribute:NSUnderlineColorAttributeName

                                     value:Cor_Blue

                                     range:range];

            //区域文本颜色

            [abs addAttribute:NSForegroundColorAttributeName

                                     value:Cor_Blue

                                     range:range];

        }

    }

//删除一遍字符,直接调用appendAttributedString:方法,会导致把之前的继续拼接,所以先删除再拼接。确保不会出现重复文本

[self.textView.textStorage deleteCharactersInRange:NSMakeRange(0, abs.length)];

//添加富文本 

[self.textView.textStorage appendAttributedString:abs];




//富文本超链接的NSTextDelegate的点击协议。

-(BOOL)textView:(NSTextView*)textViewclickedOnLink:(id)linkatIndex:(NSUInteger)charIndex {

    if([link isEqualToString:@"a://"]) {//a协议触发事件
    }

    if([link isEqualToString:@"b://"]) {//b协议触发事件

    }

       return YES;//YES就不会走系统默认的触发。走富文本中的协议

}

你可能感兴趣的:(MacOS NSTextView实现富文本协议点击)