1.textfield 限制输入字数
本方法可防止中文联想、粘贴等突破长度限制、可防止Emoji截为两半导致编码出问题。
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField == self.textFieldName) {
if (textField.text.length > 15) {
UITextRange *markedRange =[textField markedTextRange];
if(markedRange) {
return;
}
//Emoji占2个字符,如果是超出了半个Emoji,用15位置来截取会出现Emoji截为2半
//超出最大长度的那个字符序列(Emoji算一个字符序列)的range
NSRange range = [textField.text rangeOfComposedCharacterSequenceAtIndex:15];
textField.text = [textField.text substringToIndex:range.location];
}
}
}
2.textfield float类型数据输入,小数点控制以及小数点后面位数控制
- (void)textFieldDidChange:(UITextField *)textField{
if (textField.markedTextRange == nil) {
if(textField == self.moneyTextField){
if (textField.text.length >0) {
if([textField.text characterAtIndex:0] == '.'){//第一位不能是‘.’
textField.text = @"";
}
//‘.’只能出现一次
NSArray * arr = [textField.text componentsSeparatedByString:@"."];
if(arr.count >1){
textField.text = [NSString stringWithFormat:@"%@.%@",arr[0],arr[1]];
}
}
//控制输入范围 0.01~999999.99元之间
if ([textField.text doubleValue] > 999999.99) {
if([textField.text integerValue] >999999){
textField.text = [textField.text substringToIndex:6];
}else if (textField.text.length >= 9){
textField.text = [textField.text substringToIndex:9];
}
}else{
if(textField.text.length >9){
textField.text = [textField.text substringToIndex:9];
}else{
if ([textField.text containsString:@"."]) {
NSRange range = [textField.text rangeOfString:@"."];
if (textField.text.length > range.location+3) {
textField.text = [textField.text substringToIndex:range.location+3];
}
}
}
}
}
}
}
3.textfield 添加事件
[textFieldaddTarget:selfaction:@selector(自定义方法)forControlEvents:UIControlEventAllEditingEvents];