2012-10-31 39 views

回答

3

好的,你不能得到直接的输入通知,但有一个我能想到的解决方案。

实现以下的委托方法:

- (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; 
} 
+0

只要设置为“keyboardType”,当前键盘已经可见,不会改变当前键盘。您还需要在文本字段中调用'resignFirstResponder'然后'becomeFirstResponder'。 – rmaddy

+0

好点。我编辑了我的答案。 –

1

通过Leonnears给出的答案大多是回答简单的例子,但也有不少问题你需要考虑。如果用户输入34,那么会发生什么情况,然后删除?当用户将插入符号从loops末尾移到数字部分的某处时会发生什么?

这一切都开始越来越难以涵盖每个案件。但更重要的是,随着键盘开始改变,用户开始感到烦恼。这使得输入文本非常困难。我从来没有见过一个应用做你的建议,这是一个很好的理由。

让用户像使用常规键盘一样使用普通键盘。每个人都知道如何在字母和数字之间切换。自动改变键盘将会变得异常和令人困惑。

+0

虽然我的答案几乎可以处理所有事情(处理范围,并通过检查插入的字符数量与已存在的字符数量),我同意这个答案。这可能是你不应该做的事情。默认情况下,iOS允许您输入数字和字母。一段时间后用户肯定会感到恼火。 –

+0

在大多数情况下,你绝对正确。然而,在一些场景中,上述解决方案对用户来说非常方便,例如,如果列表中有几十个字段,其中每个条目都带有一个数字+文本: “34个循环,12个时间轴,45个foo,...” – obiwahn

相关问题