9

我已经尝试了下面的代码,但只允许输入键盘上的数字。我的应用程序要求键盘使用句点/句号(用于货币交易)。我试过的代码是:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

   NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

     if ([string rangeOfCharacterFromSet:nonNumberSet].location != NSNotFound)
      {
         return NO;
    }
   return YES;

}

谢谢你的帮助。

4

4 回答 4

44

尝试这个

做一个宏

#define ACCEPTABLE_CHARACTERS @"0123456789."

并使用它

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {

    if (textField==textFieldAmount)
    {
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];

        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

        return [string isEqualToString:filtered];
    }
    return YES;
}
于 2013-11-21T13:39:33.560 回答
3

在斯威夫特 3 中:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let allowedCharacters = "0123456789!@#$%^&*()_+~:{}|\"?><\\`,./;'[]=-"
    return allowedCharacters.contains(string) || range.length == 1
}
于 2016-10-28T19:36:00.497 回答
2

只需使用

[textField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];

创建文本字段后。

于 2013-11-21T13:38:39.520 回答
2

自定义字符集怎么样?像这样的东西:

NSCharacterSet *testChars = [NSCharacterSet characterSetWithCharactersInString:@"0123456789+*#-() "];

因为在 iPad 上设置键盘类型没什么用...

于 2013-11-21T13:39:53.627 回答