5

我似乎找不到任何有关 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 进行了子类化,并检查了可能随听写返回的替代短语,但没有。我得到的只是原始转换。

4

3 回答 3

4

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

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

于 2014-06-16T17:38:57.660 回答
2

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
于 2014-06-16T06:13:17.240 回答
1

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

UITextField里面的UISearchBar和你说的一模一样,它把任何标点符号或快捷键替换成一个完整的单词。我已经通过说“双逗号”对其进行了测试,它显示为,,

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

我已经在其他方面进一步测试UITextFieldTo:Cc:Bcc:Subject:。我发现他们的行为就像UITextView. “逗号”命令显示为,

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

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

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

我目前找不到任何官方文件来证明我的上述主张。当我找到它时,我会添加它。

于 2014-06-12T02:23:48.033 回答