[iOS 文字輸入限制]限制輸入特定字串等
阿新 • • 發佈:2019-01-07
通常我們需要限制輸入數字 字元 字母 或者中文等等
一般情況我們用到textfiled的代理方法去做
//
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSCharacterSet *charer = [NSCharacterSet characterSetWithCharactersInString:@"12345"];
NSString *filed = [[string componentsSeparatedByCharactersInSet:charer] componentsJoinedByString:@"" ];
if ([filed isEqualToString:string]) {
return NO;
}
return yes;
}
這樣就可以限制只輸入 字串裡給出的字元
分享一個
限制只輸入數字金額,並且限制輸入最大數字,且自動判斷輸入0後變為小數點的方法
步驟.
設定textfiled的delegate = self;
//
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return [ViewController moneyTextField:textField shouldChangeCharactersInRange:range replacementString:string max:1000];
}
#pragma mark - 限制輸入數字以及最大值 方法實現
+(BOOL)moneyTextField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string max:(NSInteger )max
{
//篩選輸入內容確保正確性
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789.\b"];
string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
return NO;
}
BOOL isHasRadixPoint = YES;
//小數點後面的位數
NSInteger RadixPointNum = 2;
NSString *existText = textField.text;
//判斷是否含有小數點
if ([existText rangeOfString:@"."].location == NSNotFound) {
isHasRadixPoint = NO;
}
if (string.length > 0) {
unichar newChar = [string characterAtIndex:0];
//開始進入判斷文字
if (existText.length>0) {
if ([existText characterAtIndex:0]=='0') {
//當首位是0的時候
if (newChar=='0') {
//輸入是零的時候判斷是否有小數點
if (isHasRadixPoint) {
return range.location<=2;
}else{
return NO;
}
}else if((newChar > '0' && newChar <= '9') &&existText.length<=1){
textField.text = @"";
}
}
}
if ((newChar >= '0' && newChar <= '9') || newChar == '.' ) {
if (newChar == '.') {
if (existText.length==0) {
textField.text = @"0.";
return NO;
}else{
return !isHasRadixPoint;
}
}else {
if (isHasRadixPoint) {
NSRange ran = [existText rangeOfString:@"."];
return (range.location - ran.location <= RadixPointNum);
} else{
//小數點前面的位數
//return existText.length<6;
if ([textField.text isEqualToString:@"0"]){
textField.text = @"0.";
}
NSString *nowString;
if (range.length==0) {
nowString = [NSString stringWithFormat:@"%@%@",textField.text,string];
}else{
nowString = [textField.text stringByReplacingCharactersInRange:range withString:string];
}
// NSString *nowString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (nowString.doubleValue>= max) {
textField.text = [NSString stringWithFormat:@"%ld",max];
return NO;
}
return nowString.doubleValue <= max;
}
}
}else {
return YES;
}
}
return YES;
}