UITextField – 只允许数字和标点符号input/键盘

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

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

谢谢你的帮助。

尝试这个

制作一个macros

 #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; } 

只是使用

 [textField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation]; 

创build你的文本域后。

如何定制字符集? 像这样的东西:

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

因为在iPad上设置键盘types是相当无用的…

在Swift 3:

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