我想创建一个支持突出显示基本内容的文本视图,例如链接和主题标签。类似的功能可以在 Twitter.app 中找到:
不需要支持点击这些链接,只需要在用户编辑文本视图内容时正确突出显示所有内容。
问题是,最好的方法是什么?我真的不想使用重量级的语法高亮库,但是我没有找到任何简单的小型库来仅高亮一些东西。
我应该自己解析文本并突出显示它吗?如果需要,我可以使用哪些库来标记文本,哪些库可以让我进行实时突出显示?
我想创建一个支持突出显示基本内容的文本视图,例如链接和主题标签。类似的功能可以在 Twitter.app 中找到:
不需要支持点击这些链接,只需要在用户编辑文本视图内容时正确突出显示所有内容。
问题是,最好的方法是什么?我真的不想使用重量级的语法高亮库,但是我没有找到任何简单的小型库来仅高亮一些东西。
我应该自己解析文本并突出显示它吗?如果需要,我可以使用哪些库来标记文本,哪些库可以让我进行实时突出显示?
是的,如果您想要轻量级使用您自己的解析来查找相关部分,然后使用textStorage
NSTextView 更改找到的范围的文本属性。
您是否尝试过使用正则表达式来匹配您的文本(在后台,当文本更新时)?找到匹配项后,设置所需的属性(NSAttributedString 的)非常简单。
这是一个小例子:你需要实现这个委托方法,textview1是TextView的出口:
- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString
{
NSLog(@"string is this");
NSString *allTheText =[textView1 string];
NSArray *lines = [allTheText componentsSeparatedByString:@""];
NSString *str=[[NSString alloc]init];
NSMutableAttributedString *attr;
BOOL isNext=YES;
[textView1 setString:@""];
for (str in lines)
{
attr=[[NSMutableAttributedString alloc]initWithString:str];
if ([str length] > 0)
{
NSRange range=NSMakeRange(0, [str length]);
[attr addAttribute:NSLinkAttributeName value:[NSColor greenColor] range:range];
[textView1 .textStorage appendAttributedString:attr];
isNext=YES;
}
else
{
NSString *str=@"";
NSAttributedString *attr=[[NSAttributedString alloc]initWithString:str];
[textView1 .textStorage appendAttributedString:attr];
isNext=NO;
}
}
}
这将为您提供带有超链接的蓝色文本;。