#pragma mark - **************** textField代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// ------ string指的是当前输入的文本 获取到string 判断输入是否为数字
NSUInteger lengthOfString = string.length;
for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) { // for循环遍历输入的string
unichar character = [string characterAtIndex:loopIndex];
if ((character < 48 || character > 57) && character != 46) return NO; // 根据unicode编码限制输入内容为数字
}
// ------ 计算输入之后textField中文本的长度
NSUInteger wordNumber = textField.text.length - range.length + string.length;
if (wordNumber > 5) {
return NO;
}
// ------判断当前文本是否存在小数点 并通过布尔值_isHadPoint记录
if ([textField.text rangeOfString:@"."].location == NSNotFound) {
_isHadPoint = NO;
}
// ------当前输入文本时
if (string.length > 0) {
// ------判断输入的是否是小数点 如果是小数点 再判断是否已经存在小数点 1.没存在 改变_isHadPoint状态 2.存在小数点 则能再次输入小数点 返回NO
unichar single = [string characterAtIndex:0];
if (single == ‘.‘) {
if (!_isHadPoint) {
_isHadPoint = YES;
}else
{
return NO; // 已经输入小数点了 不能再输入了
}
} else { // ------当输入的不是小数点时 再判断当前是否存在小数点 若存在 则限制小数点后只能输入两位
if (_isHadPoint) {
NSRange numberRange = [textField.text rangeOfString:@"."];
int numberBehindPoint = (int)range.location - (int)numberRange.location;
if (numberBehindPoint > 2) {
return NO; // ------不能超过两位
}
}
}
}
// ------当之前的所有判断都通过后 开始将textField内输入过的内容赋值给显示Label 并且限制红包金额为200
NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"%f",[toBeString doubleValue]);
if ([toBeString floatValue] > 200.0) {
_moneyNumImportTF.textColor = kRedBoardColor;
_moneyNumImportRightTF.textColor = kRedBoardColor;
_moneyNumImportLeftTF.textColor = kRedBoardColor;
[_sendRedPacketBtn setEnabled:NO];
[UIView animateWithDuration:0.5 animations:^{
[self bringSubviewToFront:_topWarningLabel];
_topWarningLabel.left = 0;
}];
} else {
// ------当没有输入时 发送Btn不能点击
if (toBeString.length == 0) {
[_sendRedPacketBtn setEnabled:NO];
} else {
[_sendRedPacketBtn setEnabled:YES];
}
_moneyNumImportTF.textColor = kBlackTextColor;
_moneyNumImportRightTF.textColor = kBlackTextColor;
_moneyNumImportLeftTF.textColor = kBlackTextColor;
[UIView animateWithDuration:0.5 animations:^{
_topWarningLabel.right = 0;
}];
}
// ------给展示Label赋值
_moneyNumShowLabel.text = [NSString stringWithFormat:@"¥%.2f",[toBeString floatValue]];
return YES;
}
总结:为textField加限制时 最好只限制return NO