如何更改从原始字符串替换的单词的颜色?

时间:2014-08-22 02:51:36

标签: objective-c colors nsstring nsmutableattributedstring

例如,有一个名为"输入"的NSString;将用户键入文本视图的内容转换为NSString。

NSString *input = inputTextField.text;

所以"输入"取决于用户键入的内容。现在,以下代码用于更改用户放置的单词,以将其更改为另一个单词。这只发生在按下"转换"按钮。

input = [input stringByReplacingOccurrencesOfString:@"(?wi)\\bHello!\\b" withString:@"greetings!" options:NSRegularExpressionSearch range:NSMakeRange(0, [input length])];

根据用户输入的内容,有超过500个单词会自动替换。完成所有扫描后,这就是最后的代码。它使得正确的自动大写。

NSMutableString *input2 = [input mutableCopy];
NSString *pattern = @"(^|\\.|\\?|\\!|\\.\"|\\!\"|\\?\")\\s*(\\p{Letter})";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
[regex enumerateMatchesInString:input options:0 range:NSMakeRange(0, [input length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    NSRange r = [result rangeAtIndex:2];
    [input2 replaceCharactersInRange:r withString:[[input substringWithRange:r] uppercaseString]];
}];

所以你可以看到"输入"被制作成副本,现在成为" input2。"替换的输入是另一个文本视图中出现的输入。像这样:

_outputTextField.text = input2;

这句话很好。如果我放,"你好!你好吗?"它将成为"问候!你好吗?"我的问题是,在输出文本视图中,我想要从ORIGINAL写入改变的任何单词变为红色,以便用户知道改变了什么。

我试过这个,但那并没有做任何事情。

    NSMutableAttributedString *mutable = [[NSMutableAttributedString alloc] initWithString:input2];
    [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, [input2 length])];

我尝试的另一种方法是添加:

if (input != input2) {
//Above code here.
}

在里面我添加了上面的代码,但它没有做任何事情。我看到的最简单的方法就是这样,如果输入(原始)与输入2不匹配,那么让它改变不匹配的颜色。

1 个答案:

答案 0 :(得分:0)

创建新的 NSMutableAttributedString * newMAS 。 然后对原始字符串进行解析,并从原始字符串或替换文本将段附加到newMAS字符串。在您添加替换文本的同时,还使用以下代码为NSAttributedString的该部分设置font属性:

[newMAS addAttribute:NSForegroundColorAttributeName
                       value:[NSColor redColor]
                       range:rangeOfReplacementText];

或者,您可以为替换文本创建一个NSMutableAttributedString并设置其颜色,然后将其添加到newMAS中,交换原始字符串的片段而不使用属性和此属性替换文本,使用方法追加NSString或NSAttributedString到NSMutableAttributedString上。有用的方法包括:

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;
- (void)appendString:(NSString *)aString;
- (void)appendAttributedString:(NSAttributedString *)attrString;