NSAttributedString无法正确获取范围?

时间:2013-07-30 20:29:52

标签: ios uitextview nsattributedstring nsrange

我在StackOverflow上找到了一些代码来突出显示UITextView中的关键字

-(IBAction) highlight:(id) sender{
      NSMutableAttributedString * string = [[NSMutableAttributedString alloc]initWithString:self.text.text];

    NSArray *words=[self.text.text componentsSeparatedByString:@" "];

    for (NSString *word in words) {        
        if ([word hasPrefix:@"@"]) {
            NSRange range=[self.text.text rangeOfString:word];
            [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
        }
    }
    [self.text setAttributedText:string];
    }

由于某些原因,它没有得到正确的范围。我可以这样写出一句话:
@Hello这个有效
然后我可以按下按钮,它会突出显示@Hello位但是如果我在@Hello之后没有输入任何内容,它将继续突出显示所有红色,无论如何。我只能假设它没有正确读取关键字的范围?这是怎么回事?

1 个答案:

答案 0 :(得分:0)

这是标准行为。图像您在文本编辑器中更改了字体,然后开始键入,字体又返回到标准设置。您将需要编码来处理它。您可以检测每个编辑并重新处理文本。如果在处理过程中检测到这种情况,可能的解决方案是在文本末尾插入空格字符(不突出显示)。然后,如果用户选择删除该空格,则突出显示将继续。