UITextField的听写结果与UITextView不同

时间:2014-06-09 19:26:34

标签: ios uitextfield uitextview siri dictation

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

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

说“123榆树圣逗号法戈逗号ND” 我得到的:123 Elm St.逗号Fargo逗号Indy“

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

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

说“123榆树圣逗号法戈逗号ND” 我得到的:123 Elm St.,Fargo,ND“

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

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

更新 我已经将UITextField子类化,并检查了可能会随着听写回来的替代短语,但是没有。只是原始转换是我得到的。

3 个答案:

答案 0 :(得分:4)

在更多地使用文本字段后,使用@Ricky的一些信息,我想出了什么让听写回来了。我将returnKeyType设置为UIReturnKeySearch。将此更改为任何其他选项可以获得我想要的听写结果。更改回搜索,结果是全文结果。这在任何地方都没有记录。

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

答案 1 :(得分:2)

我构建了一个测试工具来检查这一点,发现我得到了不同的听写结果,具体取决于我在UITextInputTraits protocol中设置的值。特别:

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

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

UITextAutocorrectionTypeDefault
UITextSpellCheckingTypeDefault

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

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

<强>更新

为了完整起见,下面是一个工作测试工具,支持转换&#34;逗号&#34;到&#34;,&#34;对于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

答案 2 :(得分:1)

我在Mail.app的所有不同字段上进行了测试。以下是我发现的事情: -

UITextField内的UISearchBar与您提到的完全相同,它会将标点符号或快捷键替换为整个词。我通过说“双逗号”测试了它,它显示为 ,,

邮件正文中的UITextView与您提到的完全一样。

我已在其他UITextField进一步测试收件人:抄送:密件抄送:主题: 即可。我发现它们的行为就像UITextView一样。 “逗号”命令显示为

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

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

所以,我认为这不是UITextViewUITextField之间的区别。但是,Apple工程师决定将标点符号或快捷方式替换为UISearchBar整个单词。我认为这是因为标点符号或快捷词在我们搜索时没有多大意义。当我们搜索某些内容时,我们通常只会记住关键字。因此,我相信Apple Engineer正试图让搜索尽可能多地完整。

我现在找不到上述索赔的官方文档。我会在找到它时添加它。