產品的需求:
- 只能輸入數字和保留兩位小數,設置
keyboardType
爲 UIKeyboardTypeDecimalPad
即可
- 可以輸入0,繼續輸入數字則把0抹掉,輸入小數點則還可以繼續輸入兩位數字,不能輸入多個小數點
基本代碼如下
/// <UITextFieldDelegate> 小數點前8位數字 小數點後2位
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (toString.length > 0) {
NSString *stringRegex = @"(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,8}(([.]\\d{0,2})?)))?";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
BOOL flag = [phoneTest evaluateWithObject:toString];
//判斷如果第一位輸入0 第二位不是小數點的話就把0抹掉
if ([textField.text hasPrefix:@"0"] && textField.text.length == 1 && ![string isEqualToString:@"."]) {
self.moneyInputTextfield.text = [string substringFromIndex:1];
return YES;
}
if (!flag) {
return NO;
}
}
return YES;
}