1. 程式人生 > >[iOS 文字輸入限制]限制輸入特定字串等

[iOS 文字輸入限制]限制輸入特定字串等

通常我們需要限制輸入數字 字元 字母 或者中文等等
一般情況我們用到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; }