UITextField - iPad上的UIKeyboardTypeDecimalPad?

Den*_*er9 7 keyboard objective-c ipad ios

在iPad上......

textField.keyboardType = UIKeyboardTypeDecimalPad;
Run Code Online (Sandbox Code Playgroud)

...只显示常规键盘,但从顶部的数字开始(下面有很多标点符号).

但是输入一个数字.我只希望用户能够输入数字和小数点,就像iPhone上的UIKeyboardTypeDecimalPad一样.

有没有办法让不相关的密钥消失并让我的用户独自一人?

lem*_*nar 8

设置UITextFieldkeyboardType唯一的方便了用户输入正确的字符.即使在iPhone上,用户也可以通过硬件键盘或通过粘贴字符串来输入其他字符.

相反,实施UITextFieldDelegate-textField:shouldChangeCharactersInRange:replacementString:验证用户输入.你也可能不想硬编码数字0-9和句号.例如,某些语言环境中的用户使用逗号分隔小数的整数:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *candidate = [[textField text] stringByReplacingCharactersInRange:range withString:string];
    if (!candidate || [candidate length] < 1 || [candidate isEqualToString:@""])
    {
        return YES;
    }
    NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:candidate];
    if (!number || [number isEqualToNumber:[NSDecimalNumber notANumber]])
    {
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

或者,你可能会在用户完成输入文本,在执行验证–textFieldShouldReturn:,– textFieldShouldEndEditing:– textFieldDidEndEditing:根据需要.

  • 没有用这种方式我尝试了...它总是返回YES, (4认同)
  • 不知道为什么这被标记为答案.对于部分匹配,decimalNumberWithString愉快地返回0.例如:ejunk返回0,因此它不能用作验证器. (2认同)