NSTextView 设置富文本,不能直接使用attributedString,需要通过textStorage去实现。
即:
富文本
NSMutableAttributedString*abs=[[NSMutableAttributedString alloc]initWithString:str];
//定义的富文本协议,后续代理中触发
NSArray *agreementArr=@[@"a://",@"b://"];//自定义的协议,比如a://协议是跳转客服,b://协议是打开网页
for(int i =0;i<agreementArr.count;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就不会走系统默认的触发。走富文本中的协议
}
网友评论