ios – 如何检测语音识别正在进行中

ios – 如何检测语音识别正在进行中,第1张

概述问题: 我有UITextField与UIButton并排发送功能.当用户按下发送按钮时,我正在执行简单的 *** 作: - (IBAction)sendMessage: (id)sender { [self.chatService sendMessage: self.messageTextField.text]; self.messageTextField.text = @""; // her 问题:

我有UITextFIEld与UIbutton并排发送功能.当用户按下发送按钮时,我正在执行简单的 *** 作:

- (IBAction)sendMessage: (ID)sender {   [self.chatService sendMessage: self.messageTextFIEld.text];   self.messageTextFIEld.text = @""; // here I get exception}

现在,当用户从键盘开始使用听写时,然后按下听写视图(键盘)并立即按下发送按钮,我有异常“范围或索引越界”.

可能的方法:

我注意到,当语音识别服务器处理数据时,其他应用程序会禁用此“发送”按钮.这恰好在两个事件之间:用户按下“完成”,结果出现在文本字段中.我希望以同样的方式解决它.

我在文档中找到可以收到此通知的问题.我找到了UITextinput协议,但这不是我需要的.

类似主题:

> Using Dictation – iOS 6 – DidStart – 解决方案不可接受(苹果可能拒绝)
> Disable Dictation button on the keyboard of iPhone 4S / new iPad – 与上述类似的方法

我试过了什么:

>简单地捕捉并忽略异常.崩溃没有确定,但虚拟键盘变得完全没有反应
>当[UITextinputMode currentinputMode] .primaryLanguage等于@“dictation”时禁用发送按钮.在听写服务提交新值之前报告听写结束模式的通知UITextinputCurrentinputModeDIDChangeNotification到达,我仍然可以点击发送按钮导致异常.当primaryLanguage损失@“听写”值时,我可以增加延迟,但我不喜欢这种方法.最可能的是,这种所需的延迟取决于语音识别服务的响应程度.
>我在不同的事件上添加了一系列 *** 作(这个evets正在寻找处理:UIControlEventEditingDIDBegin,UIControlEventEditingChanged,UIControlEventEditingDIDEnd,UIControlEventEditingDIDEndOnExit).好处是看起来UIControlEventEditingChanged在所需的时刻完全被触发:当用户在听写视图上按“完成”并且服务提交或结束听写时.所以这是我迄今为止最好的概念.不好的是,在其他情况下这也被解雇了,并且没有信息可以区分这种控制事件被触发的情况,所以我不知道应该禁用或启用按钮或什么也不做.

解决方法 我终于找到了终极解决方案

它简单优雅将通过苹果审查,它始终工作.只需对UIControlEventEditingChanged做出反应,并检测出替换类型的存在,如下所示:

-(voID)vIEwDIDLoad {  [super vIEwDIDLoad];  [self.textFIEld addTarget: self                     action: @selector(eventEditingChanged:)           forControlEvents: UIControlEventEditingChanged];}-(IBAction)eventEditingChanged:(UITextFIEld *)sender {  NSRange range = [sender.text rangeOfString: @"\uFFFC"];  self.sendbutton.enabled = range.location==NSNotFound;}

老方法

Finlay我找到了一些解决方案.这是改进的概念nr 3,具有概念nr 2的混合(基于that answer).

-(voID)vIEwDIDLoad {  [super vIEwDIDLoad];  [self.textFIEld addTarget: self                     action: @selector(eventEditingChanged:)           forControlEvents: UIControlEventEditingChanged];}-(IBAction)eventEditingChanged:(UITextFIEld *)sender {  Nsstring *primaryLanguage = [UITextinputMode currentinputMode].primaryLanguage;  if ([primaryLanguage isEqualToString: @"dictation"]) {    self.sendbutton.enabled = NO;  } else {    // restore normal text fIEld state    self.sendbutton.enabled = self.textFIEld.text.length>0;  }}- (IBAction)sendMessage: (ID)sender {   [self.chatService sendMessage: self.messageTextFIEld.text];   self.messageTextFIEld.text = @"";}- (BOol)textFIEldShouldReturn:(UITextFIEld *)textFIEld {  if (self.textFIEld.text.length==0 || !self.sendbutton.enabled) {     return NO;   }   [self sendMessage: textFIEld];   return YES;}// other UITextFIEldDelegate methods ...

现在问题没有出现,因为用户在可能发生时被阻止(恰好在用户按下听写视图上的“完成”按钮和结果来自语音识别服务之间.好处是使用公共API(只有@“听写”可能是一个问题,但我认为它应该被Apple接受).

总结

以上是内存溢出为你收集整理的ios – 如何检测语音识别正在进行中全部内容,希望文章能够帮你解决ios – 如何检测语音识别正在进行中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1010524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存