0

我目前正在开发一个主要面向日语(次要英语)市场的应用程序,我发现UIKeyboardType如果使用 Tenkey/flick 风格的日语键盘,我无法设置文本字段并使其实际工作。即使UIKeyboardType应该做出适当的回应,

userIdField = [[[UITextField alloc] initWithFrame:CGRectMake(120, 5, 185, 35)]autorelease];
userIdField.delegate = self;
userIdField.keyboardType = UIKeyboardTypeASCIICapable;
userIdField.autocorrectionType = UITextAutocorrectionTypeNo;
userIdField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
userIdField.returnKeyType = UIReturnKeyDone;
userIdField.autocapitalizationType = UITextAutocapitalizationTypeNone;
userIdField.backgroundColor = [UIColor clearColor];
[cell addSubview:userIdField];

当我点击文本字段时,它将打开默认的日文 Tenkey 风格键盘。我试过UIKeyboardTypeASCIICapable, UIKeyboardTypeURL, UIKeyboardTypeEmailAddressUIKeyboardTypeNamePhonePad它们总是显示默认的十键日文键盘。我知道正在读取代码,因为设置UIKeyboardTypePhonePad可以正常工作,但由于某种原因,手机除了默认的日文 Tenkey 键盘外不会显示任何内容。

有没有办法解决这个问题,或者这是一个自古以来就存在的错误?如何强制用户使用只能输入字母、数字、“_/.”字符的键盘?

使用韩文(韩文)键盘,它偶尔会工作 - ASCII 键盘可以正常使用,url 键盘可以使用带有 .com 按钮的韩文。对于 ASCIICapable,查看 UITextInputTraits.h 文件,它说: UIKeyboardTypeASCIICapable, // Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active 这没有任何意义,因为韩文和日文都是非 ASCII,但韩文 + ASCIICapable = ASCII(虽然它应该是韩文,因为它是非 ascii) , 而日语 Tenkey + ASCIICapable = 日语 Tenkey。

我看到其他有关以编程方式更改键盘语言的帖子,这是无法完成的,但这个问题更侧重于询问为什么 UIKeyboardType 指定的键盘类型没有出现。

4

1 回答 1

0

之所以显示日文 Tenkey 键盘是因为它在技术上是一个 ASCIICapable 键盘,即使您必须先单击该ABC按钮才能使键盘更改为 ASCII 输入。我已经想到了解决这个问题的方法,尽管它很复杂并且充满了问题:

  1. 2 个文本字段,一个在另一个之上。顶部文本字段隐藏
  2. 底部文本字段的secureTextEntry 设置为YES,这会强制使用实际的ASCII 键盘,但会混淆输入的文本
  3. 当用户点击底部文本字段时,顶部文本字段将显示
  4. 当在键盘上输入文本时,它首先进入底部文本字段,然后设置顶部文本字段的文本。否则,您只会得到用于隐藏文本输入的全黑圆圈。

如果您犯了一个错误并想要编辑文本,那么您必须执行大量其他代码才能使其正常工作,分配第一响应者等(例如确保输入文本时,将其输入正确位置的底部文本字段)。

这显然不是最佳解决方案。

于 2012-11-29T05:26:39.523 回答