2

例如,有一个名为“input”的 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]];
}];

所以可以看到“input”被做成了一个副本,现在变成了“input2”。被替换的输入是在另一个文本视图中出现的。像这样:

_outputTextField.text = input2;

而这句话很好。如果我说:“你好!你好吗?” 它会变成“问候!你好吗?” 我的问题是,在输出文本视图中,我希望从原始文字中更改的任何单词都变为红色,以便用户知道发生了什么变化。

我试过这个,但这没有任何作用。

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

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

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

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

4

1 回答 1

0

创建一个新的NSMutableAttributedString *newMAS。然后从原始字符串或替换文本中解析原始字符串并将段附加到 newMAS 字符串。在追加替换文本的同时,还为 NSAttributedString 的那部分设置字体属性,使用如下代码:

[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;
于 2014-08-25T04:08:11.907 回答