2014-11-21 2 views
2

Мне нужно динамически обновлять слова в содержимом UiTextView, в то время как TTS играет без обновления страницы.Обновлять содержимое UITextView динамически в определенном диапазоне

Проблема: В то время как tts играет за каждое слово делегата (willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance) вызывает. поэтому в это время я обновляю цвет текста, используя NSMutableAttributedString.

В этом процессе содержимое в текстовом виде нестабильно, потому что для каждой страницы слова освежает.

поэтому мне нужно обновить текст в текстовом режиме, не обновляя страницу.

Я написал код следующим образом.

NSMutableAttributedString * attrStr = [[NSMutableAttributedString Alloc] initWithString: _theContent];

[attrStr addAttribute: NSFontAttributeName value: [UIFont systemFontOfSize: self.fontSize] диапазон: [self wholeArticleRange]];

[attrStr addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: theRange];

textview.attributedText = attrStr;

-андроид мы использовали spannable класса сделать этот путь. Есть ли какой-нибудь класс в IOS?

Пожалуйста, дайте нам разрешение как можно скорее

Спасибо заранее.

ответ

1

Вы можете получить доступ к объекту textStorage вида текста, типа NSTextStorage, который является подклассом NSMutableString. Оттуда вы можете использовать любую операцию NSMutableString, включая атрибуты настройки на разных диапазонах, не отправляя полностью новую строку в текстовое представление (что сделает его мерцающим).

Не забудьте позвонить beginEditing и endEditing, чтобы сгруппировать изменения, если вам нужно сделать несколько вызовов, чтобы повысить производительность.

+0

Спасибо за вашу большую помощь. Я думаю, что моя проблема решена. –

0

Если вы просто хотите, чтобы заменить любой текст в UITextField с какой-либо другой на лету, Вы можете использовать метод замены строки, Как

[textField.text stringByReplacingOccurrencesOfString:@"your string" withString:@"string to be replaced"]; 

Это будет заменить все вхождения цели (строка будет заменена) с заменой.

2

Я написал код следующим образом. Я новичок в IOS, поэтому, если я ошибаюсь, правильно меня поправьте.

  • (NSMutableDictionary *) attDict {

    если (!_attDict) { _attDict = [словарь NSMutableDictionary];

    UIFont *font = [UIFont systemFontOfSize:self.fontSize]; 
    // UIFont *font = [UIFont fontWithName:@"TimesNewRomanPSMT" size:self.fontSize]; 
    [_attDict setObject:font forKey:NSFontAttributeName]; 
    [_attDict setObject:[UIColor blueColor] forKey:NSForegroundColorAttributeName]; 
    

    } возвращение _attDict; }

    [[displayArticleViewView] .textStorage setAttributes: self.attDict range: theRange];

Благодаря

Смежные вопросы