【问题标题】:Dictation results for UITextField different than UITextViewUITextField 的听写结果与 UITextView 不同
【发布时间】:2014-06-09 19:26:33
【问题描述】:

我似乎找不到任何有关 iOS 中文本输入的语音转文本选项的文档。我知道您可以使用一些 AV 内容手动执行此操作,但是启用 Siri 后您获得的开箱即用听写功能有些奇怪。

试试这个。使用搜索栏打开您拥有的任何 iOS 应用程序。这将是我们的 UITextField 实验。更好的是,打开 Mail.app。你不能卸载它,所以我知道你有它。

说“123 Elm St. comma Fargo comma ND” 我得到了什么:123 Elm St. comma Fargo comma Indy"

与我所说的非常接近。没什么大不了的。那是一个文本字段/搜索栏。让我们在 UITextView 中尝试一下。

打开一封新电子邮件,然后转到电子邮件正文。让我们说同样的话。

说“123 Elm St. comma Fargo comma ND” 我得到了什么:123 Elm St., Fargo, ND"

看起来更好!所以我想知道的是,为什么 UITextView 对标点符号和其他命令的识别比文本字段更好。这不仅限于逗号,它涵盖了整个范围。

有没有办法指定我想要听写的文本类型?有没有办法改变它,所以我在文本字段中得到这个标点符号识别?或者有人可以向我指出一些文档,这些文档说这就是它们不同的原因,我完全搞砸了。无论哪种方式,一些答案都会有所帮助。提前致谢。

更新 我对 UITextField 进行了子类化,并检查了听写可能会返回的替代短语,但没有。我得到的只是原始转换。

【问题讨论】:

    标签: ios uitextfield uitextview siri dictation


    【解决方案1】:

    在多玩了一些文本字段并使用@Ricky 提供的一些信息之后,我弄清楚了是什么阻碍了听写。我将returnKeyType 设置为UIReturnKeySearch。将此更改为任何其他选项都会给我想要的听写结果。改回搜索,结果是全文结果。这在任何地方都没有记录。

    这种行为在任何地方都没有记录。感谢@Ricky 指导我的思考,即使它不是 100% 正确的答案。它确实帮助我找到了问题的根源。

    【讨论】:

      【解决方案2】:

      我构建了一个测试工具来检查这一点,并发现根据我在UITextInputTraitsprotocol 中设置的值,我会得到不同的听写结果。具体来说:

      myTextField.autocorrectionType = UITextAutocorrectionTypeYes; // or UITextAutocorrectionTypeNo
      myTextField.spellCheckingType = UITextSpellCheckingTypeYes; // or UITextSpellCheckingTypeNo
      

      影响 UITextField 的听写结果。注意 UITextField 和 UITextView 的默认值是:

      UITextAutocorrectionTypeDefault
      UITextSpellCheckingTypeDefault
      

      UITextInputTraits documentation 没有这么说,但我想 UITextField 和 UITextView 之间的默认行为可能会有所不同,或者(更有可能)自动更正在某些字段(例如搜索框)上关闭,甚至(正如@Ricky 在他的回答中提到的那样)应用程序开发人员已选择在呈现给用户之前更改结果。

      在 iOS7.1 下测试,我可以将 UITextField 和 UITextView 的“逗号”转换为“,”。此外,即使打开了自动更正功能,我的发音有时也意味着我的 UITextField 和 UITextView 都得到了“Indy”而不是“ND”。

      更新:

      为了完整起见,下面是一个工作测试工具,它支持 UITextField 和 UITextView 将“逗号”转换为“,”。正如 OP 在他自己的回答中所暗示的那样 - 不需要设置自动更正和拼写检查来使其正常工作。

      @implementation TestHarnessViewController {
          UITextField *myTextField;
          UITextView *myTextView;
      }
      
      - (void)viewDidLoad
      {
          [super viewDidLoad];
      
          [self.view setBackgroundColor:[UIColor grayColor]];
      
          myTextField = [UITextField new];
          [myTextField setFrame:CGRectMake(10, 100, 283, 23)];
          myTextField.backgroundColor = [UIColor whiteColor];
          [self.view addSubview:myTextField];
      
          myTextView = [UITextView new];
          [myTextView setFrame:CGRectMake(10, 200, 283, 100)];
          [self.view addSubview:myTextView];
      }
      
      - (void)keyboardWillShow:(NSNotification *)note {
          //
      }
      
      - (void)keyboardWillHide:(NSNotification *)note {
          //
      }
      
      
      - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
          return TRUE;
      }
      
      - (BOOL)textFieldShouldReturn:(UITextField *)textField {
          return [textField resignFirstResponder];
      }
      
      - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range  replacementText:(NSString *)text
      {
          return TRUE;
      }
      
      @end
      

      【讨论】:

      • 那么您是说 autocorrectionType 和 spellCheckingType 设置为 YES 的文本字段会返回实际的标点符号吗?我正在尝试使用我的设置,但它仍在返回我的原始结果。
      • 是的——对我来说,在 iOS7.1 下,我可以将听写输入 UITextField 以将“逗号”转换为“,”。几个小时后有机会时,我将删除所有不必要的东西并将我的测试工具张贴在这里。没关系 - 我只是注意到你已经发布了你自己的回复,你的听写工作正常。
      • 您的测试以及您在文本字段/视图中获得了正确的结果也帮助我弄清楚发生了什么。为什么我的不一样,所以我查看了我的设置并开始修补可能影响它的东西。感谢您的帮助。
      【解决方案3】:

      我已经对 Mail.app 中的所有不同字段进行了测试。以下是我发现的东西:-

      UISearchBar 中的UITextField 和你提到的完全一样,它将任何标点符号或快捷方式 替换为一个整个单词。我通过说“双逗号”对其进行了测试,它显示为 ,,

      邮件正文中的UITextView也和你提到的一模一样。

      我在其他UITextFieldfor To:Cc:Bcc:Subject:强>。我发现他们的行为就像UITextView。 “逗号”命令显示为 ,

      我打开了提醒应用程序并测试了标题上的命令,我相信它是UITextField。 “逗号”命令也显示为 ,

      我在日历应用上进一步测试并尝试添加事件。我测试了标题和位置。对于它们,“逗号”命令也显示为 ,

      所以,我相信UITextViewUITextField 之间没有区别。但这是 Apple 工程师做出的决定,将 标点符号或快捷方式 替换为 UISearchBar整个单词。我认为这是因为标点符号或快捷词在我们搜索时没有多大意义。当我们搜索某些东西时,我们通常只记得关键字。因此,我相信 Apple Engineer 正在努力使搜索尽可能多地包含完整的单词。

      我目前找不到任何官方文档来支持我的上述声明。找到后我会添加的。

      【讨论】:

      • 因为您可以在 To、CC、Bcc 和 Subject 中有几行文本,这些都可能是 UITextViews,这使我已经找到了可信度。提醒和日历也是如此。我认为这个答案还没有发现任何新东西。
      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多