用户点击空格后,将UITextField键盘从数字切换为字母表
我希望我的键盘在用户点击空间后从UIKeyboardTypeNumbersAndPunctunuation模式更改为普通文本模式。用户点击空格后,将UITextField键盘从数字切换为字母表
因此,他可以轻松地输入类似“34循环”的东西。
好的,你不能得到直接的输入通知,但有一个我能想到的解决方案。
实现以下的委托方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
替换字符串,正如它的名字状态,包含要替换文本字段中现有字符串的字符串。你可以做的就是检查这个字符串的最后一个字符,如果它确实是一个空间,然后更改键盘类型:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
char lastCharacter = [string characterAtIndex:[string length] - 1]; //Get the last input character in the ext field.
if(lastCharacter == ' ')
{
//The last character is a space, so...
textField.keyboardType = UIKeyboardTypeDefault;
[textField resignFirstResponder];
[textField becomeFirstResponder];
}
return YES;
}
通过Leonnears给出的答案大多是回答简单的例子,但也有不少问题你需要考虑。如果用户输入34
,那么会发生什么情况,然后删除?当用户将插入符号从loops
末尾移到数字部分的某处时会发生什么?
这一切都开始越来越难以涵盖每个案件。但更重要的是,随着键盘开始改变,用户开始感到烦恼。这使得输入文本非常困难。我从来没有见过一个应用做你的建议,这是一个很好的理由。
让用户像使用常规键盘一样使用普通键盘。每个人都知道如何在字母和数字之间切换。自动改变键盘将会变得异常和令人困惑。
虽然我的答案几乎可以处理所有事情(处理范围,并通过检查插入的字符数量与已存在的字符数量),我同意这个答案。这可能是你不应该做的事情。默认情况下,iOS允许您输入数字和字母。一段时间后用户肯定会感到恼火。 –
在大多数情况下,你绝对正确。然而,在一些场景中,上述解决方案对用户来说非常方便,例如,如果列表中有几十个字段,其中每个条目都带有一个数字+文本: “34个循环,12个时间轴,45个foo,...” – obiwahn
只要设置为“keyboardType”,当前键盘已经可见,不会改变当前键盘。您还需要在文本字段中调用'resignFirstResponder'然后'becomeFirstResponder'。 – rmaddy
好点。我编辑了我的答案。 –