Как изменить цвет слова, которое было заменено из исходной строки?

Например, существует NSString с именем input, который преобразует то, что пользователь вводит в текстовое представление, в 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]];
}];

Итак, вы можете видеть, что «ввод» превращается в копию и теперь становится «вход2». Замененный ввод — это то, что выходит в другом текстовом представлении. как это:

_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.
}

и внутри я добавил приведенный выше код, но он ничего не делает. Самый простой подход, который я вижу, выглядит примерно так: если ввод (оригинал) не соответствует вводу2, заставьте его изменить цвет, который не соответствует.


person Jose Ramirez    schedule 22.08.2014    source источник
comment
Вы пытались создать строку замены как NSAttributedString и использовать ее вместо непосредственного @Greetings!?   -  person user1118321    schedule 22.08.2014
comment
Что именно ты имеешь ввиду? Потому что приветствие — это слово, которое заменяет другое слово. Вы имеете в виду превратить его в NSAttributedString, а затем покрасить в красный цвет? Если я это сделаю, каждое приветственное слово станет красным, даже то, которое пользователь вставил сам. Я не хочу этого делать. Только слова, которые изменились.   -  person Jose Ramirez    schedule 22.08.2014


Ответы (1)


Создайте новый 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;
person Ron Reuter    schedule 25.08.2014