UITextField与UITextView的听写结果不同



我似乎找不到任何关于iOS中文本输入的语音到文本选项的文档。我知道你可以用一些AV的东西手动完成,但当Siri启用时,你得到的开箱即用的听写有一些怪癖

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

说"123 Elm St.逗号Fargo逗号ND"我得到的:123 Elm St.逗号Fargo逗号Indy">

和我说的差不多。没什么大不了的。那是一个文本字段/搜索栏。让我们在UITextView中尝试一下。

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

说"123 Elm St.逗号Fargo逗号ND"我得到的:123 Elm St.,Fargo,ND">

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

有没有办法指定我想要听写的文本类型?有没有办法改变它,让我在文本字段中识别标点符号?或者有人能给我指一些文件,说这就是为什么它们不同,而我完全搞砸了。无论哪种方式,一些答案都会有所帮助。提前谢谢。

更新我已经对UITextField进行了子类化,并检查了听写中可能出现的备用短语,但没有。我得到的只是最初的转换。

在反复处理文本字段并使用@Ricky的一些信息后,我发现了阻碍听写的原因。我正在将returnKeyType设置为UIReturnKeySearch。将此选项更改为任何其他选项都可以得到我想要的听写结果。更改回"搜索",结果为全文结果。这在任何地方都没有记录。

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

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

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

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

UITextAutocorrectionTypeDefault
UITextSpellCheckingTypeDefault

UITextInputTraits文档没有这么说,但我想默认行为可能在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

我已经在Mail.app中的所有不同字段上进行了测试

UISearchBar中的UITextField与您提到的完全相同,它将任何标点符号或快捷键替换为整词。我通过说">双逗号"来测试它,它显示为

邮件正文上的UITextView也与您提到的完全相同。

我在其他UITextField上进一步测试了收件人:抄送:件抄送:主题:。我发现他们的行为就像UITextView。"逗号"命令显示为

我打开了提醒应用程序,并在标题上测试了该命令,我认为它是UITextField。"逗号"命令也显示为

我在日历应用程序上进行了进一步测试,并尝试添加一个事件。我测试了标题和位置。对于这两种情况,"逗号"命令也显示为

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

我目前找不到任何关于我上述索赔的官方文件。当我找到它时,我会添加它。

相关内容

  • 没有找到相关文章

最新更新