AVSpeechSynthesizer疯狂使用textView selectedRange

时间:2018-01-15 08:54:44

标签: objective-c nsrange avspeechsynthesizer

我正在尝试让AVSpeechSynthesizerUITextView中读取用户的文字选择。当我双击一个单词时,它的效果非常好,但每当我尝试选择多个单词时,AVSpeechSynthesizer开始以奇怪的方式说出单词。有没有办法防止这种行为或仅在他们释放选择手指时检索用户的文本选择?

非常感谢任何帮助。

以下是我的工作:

-(void) textViewDidChangeSelection:(UITextView *)textView{
NSRange r = textView.selectedRange;
if (!(r.length == 0)) {

    NSString *selText = [self.entryTextField2.text substringWithRange:r];
    AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:selText];
    [utterance setRate:0.5f];
    utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:self.selectedSpeakerLanguage];
    [self.synthesizer speakUtterance:utterance];

    }
}

1 个答案:

答案 0 :(得分:0)

我认为我应该从一开始就采用Apple方式,或者至少采用IOS方式。直接从textViewDidChangeSelection读取selectedRange:绝对不是一个好主意。您需要使用[UIMenuController sharedMenuController]来呈现一个触发readSelection方法的UIMenuItem。