在开发中有时候需要数字键盘,但是设置textfield为默认数字键后,
在模拟器上如果用电脑键盘仍然可以输入字母,
在真机上如果使用搜狗等其他输入法也可能会出现可以输入字母的情况。解决方法如下,在textfield的代理方法中实现
1 #pragma mark - UITextFieldDelegate 2 - (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 3 //禁止用户输入字母 4 NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; 5 for (int i = 0; i < [string length]; i++) { 6 unichar c = [string characterAtIndex:i]; 7 if (![myCharSet characterIsMember:c]) { 8 return NO; 9 } 10 } 11 12 //处理第一个数字为小数点或者0的情况 13 NSString *text = theTextField.text; 14 NSString *passcode = [text stringByReplacingCharactersInRange:range withString:string]; 15 if ([passcode hasPrefix:@"."]) 16 { 17 return NO; 18 } 19 20 21 //处理小数点两位后的情况 22 if (!([theTextField.text rangeOfString:@"."].location == NSNotFound)) { 23 NSArray *comArray = nil; 24 comArray = [passcode componentsSeparatedByString:@"."]; 25 if (([comArray count] > 1) && ([comArray[1] length] > 2)) 26 { 27 return NO; 28 } 29 30 } 31 32 //处理两个以上小数点的情况 33 if ([string isEqualToString:@"."]) 34 { 35 // if ([text containsString:@"."]) 36 if(!([text rangeOfString:@"."].location == NSNotFound)) 37 { 38 return NO; 39 } 40 } 41 42 return YES; 43 }