UITextField输入限制汇总
2017-01-16 本文已影响48人
lym不解释
- textField输入金额、数字、整数、小数 输入判断
#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (toString.length) {
NSString *stringRegex;
if (textField == self.teamPriceTF || textField == self.masterPriceTF) {
// 0~99999
stringRegex = @"(\\+)?(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,4}(([.]\\d{0,2})?)))?";
}
else if (textField == self.prepayPriceTF) {
// 1~9.9
stringRegex = @"([1-9]{1}(([.]\\d{0,1})?))?"
}
else if (textField == self.personCountTF) {
// 2~10
stringRegex = @"[2-9]|10?";
}
else if (textField == self.timersTF) {
// 1~999
stringRegex = @"[1-9]\\d{0,2}?";
}
else if (textField == self.personCountTF) {
// 2~10
stringRegex = @"[2-9]|10?";
}
else if (textField == self.timersTF) {
// 1~999
stringRegex = @"[1-9]\\d{0,2}?";
}
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
BOOL flag = [phoneTest evaluateWithObject:toString];
return flag;
}
return YES;
}
2.textField输入个数限制遇上输入法的问题
2.1解决办法
//最多输入120个字
#pragma mark - UITextViewDelegate
- (void)textViewDidChange:(UITextView *)textView{
int kMaxLength = 120;
NSString *toBeString = textView.text;
//if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length >= kMaxLength) {
textView.text = [toBeString substringToIndex:kMaxLength];
_countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
[self.view endEditing:YES];
}else{
_countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
}
}
}
2.2.给textField添加一个方法
[_textField addTarget:self action:@selector(editChange:) forControlEvents:UIControlEventEditingChanged];
//最多输入6个字
#define kMaxLength 6
- (void)editChange:(UITextField*)textfield {
NSString *toBeString = textfield.text;
NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage; // 键盘输入模
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textfield markedTextRange];
//获取高亮部分
UITextPosition *position = [textfield positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > kMaxLength) {
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
if (rangeIndex.length == 1) {
textfield.text = [toBeString substringToIndex:kMaxLength];
}
else {
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kMaxLength)];
textfield.text = [toBeString substringWithRange:rangeRange];
}
}
}
}
else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
if (toBeString.length > kMaxLength) {
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
if (rangeIndex.length == 1) {
textfield.text = [toBeString substringToIndex:kMaxLength];
}
else {
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0,kMaxLength)];
textfield.text = [toBeString substringWithRange:rangeRange];
}
}
}
3.去掉首尾空格
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
// 将字符串首尾空格去掉
textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return YES;
}