1

我正在开发一个相当简单的 iPhone 应用程序来求解二次方程,主要是因为它非常简单——至少是概念和数学!

我在 Interface Builder 中创建了一个界面,它有几个标签、3 个文本字段(varAfield 等)和一个 Solve 按钮。设置为 UITextFieldDelegate 的 3 个文本字段已设置为自动显示“数字和标点符号”键盘。此代码用于关闭键盘,然后在用户点击返回键时自动移动到下一个变量(表示“下一步”,但变量 C 表示“完成”

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == varAfield) {
    [varAfield resignFirstResponder];
    [varBfield becomeFirstResponder];
}
if (theTextField == varBfield) {
    [varBfield resignFirstResponder];
    [varCfield becomeFirstResponder];
}
if (theTextField == varCfield) {
    [varCfield  resignFirstResponder];
}
return YES;
}

无论如何,问题出现在 becomeFirstResponder 的第一个实例上。键盘按应有的方式出现,但是,它使用的是 ASCII 键盘而不是“数字和标点符号”。第二次调用它时,它按应有的方式工作。另外,如果我再次从变量 A 开始,它将正常工作。无论我将 becomeFirstResponder 的第一个实例移动到哪里,第一次(也是唯一一次)在应用程序中调用它时,它的行为都不正确。

更新: becomeFirstResponder 仍然(即使在第一个实例上)尊重我选择的返回键,但无论设置哪个键盘,它仍然显示“ASCII Capable”。发生什么了?我已经检查了 IB 中的所有内容,它似乎没问题...

4

2 回答 2

4

我可以确认这仅发生在设备上,而不是在模拟器中。我可以在 v2.2.1、3.0 和 3.1 中复制这种行为。

如果您有一大堆文本字段,并通过调用 textFieldShouldReturn 中的 becomeFirstResponder 将它们链接在一起,如上例所示,并且所有字段都设置为键盘类型 UIKeyboardTypeNumbersAndPunctuation,对于每个 SECOND 字段,键盘将更改为 UIKeyboardTypeASCIICapable。

我尝试过明确地设置 setKeyboardType:UIKeyboardTypeNumbersAndPunctuation ,但这没有区别。

有趣的是,只有当您以编程方式调用 becomeFirstResponder 时才会发生这种情况。如果用户直接单击文本字段,则键盘会正确显示。

更有趣的是,如果您查看调试器中的 keyboardType 属性,即使界面上显示了 ASCII 键盘,它仍然设置为 UIKeyboardTypeNumbersAndPunctuation。

出现这种情况的原因是因为 ASCII 和数字键盘是同一视图的不同模式。

键盘上“下一步”/“返回”键的默认操作包括从数字视图切换回字母视图,这就是这里发生的事情。

修复:从 textFieldShouldReturn 返回 NO 以防止发生默认行为。

于 2009-10-06T00:44:08.733 回答
0

您是否尝试过首先在其他视图上调用 becomeFirstResponder,这样当您在文本字段上调用它时,它就不是第一次了?

顺便说一句,前两个 resignFirstResponder 是多余的。它们甚至可能是导致漏洞暴露的原因。

于 2009-07-31T19:21:46.260 回答