UITextField输入限制


限制只能输入特定的字符

//(这个代表可以输入数字和换行,请注意这个\n,如果不写这个,Done按键将不会被触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入\n)

#define NUMBERS @"0123456789\n"   


//如果你要限制输入英文和数字的话,可定义为

#define kLETTERNUM @"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


#pragma mark - UITextFieldDelegate


-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

    NSCharacterSet* cs;

    //invertedSet方法是去反字符,把所有的除了数字字母的字符都找出来

    cs = [[NSCharacterSet  characterSetWithCharactersInString:kLETTERNUM]  invertedSet];

    

    //把输入框输入的字符string根据cs中字符一个一个去除,cs字符分割成单字符并转化为NSArray,然后componentsJoinedByString是把NSArray的字符通过“”无间隔连接成一个NSString字符赋给filtered,就是只剩数字和字母了

    NSString* filtered = [[string  componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

   BOOL canChange = [string   isEqualToString:filtered];

   return canChange;

}

当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。


限制只能输入一定长度的字符

方法一:实现UITextField代理方法:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

 {

     if (range.location >= 20

     {

         show(@"超过最大字数不能输入了");

         return NO;

     }

     return YES;

 }

void show(id formatstring)

{

    UIAlertView *Point = [[[UIAlertView allocinitWithTitle:nil

                                                     message:formatstring

                                                    delegate:nil

                                           cancelButtonTitle:@"OK"

                                           otherButtonTitles:nilautorelease];

    [Point show];

}


或者

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

    //string就是此时输入的那个字符,textField就是此时正在输入的那个输入框返回YES就是可以改变输入框的值

    

   if ([string isEqualToString:@"\n"])//按回车可以改变

    {

       returnYES;

    }

     

   NSString* toBeString = [textField.text  stringByReplacingCharactersInRange:range withString:string];//得到输入框的内容

   if (_textField == textField)//判断是否是我们想要限定的那个输入框

    {

       if ([toBeString length] >20)

        {

            textField.text = [toBeString substringToIndex:20];

           UIAlertView *alertView = [[[UIAlertView allocinitWithTitle:nil

                                                               message:@"超过最大字数不能输入了"

                                                              delegate:nil

                                                     cancelButtonTitle:@"OK"

                                                      otherButtonTitles:nil]autorelease];

            [alertView show];

           returnNO;

        }

    }

    

    return YES;

}

方法二:

UITextField *nTextField = [[UITextField allocinitWithFrame:CGRectMake(60024040)];

            nTextField.borderStyle = UITextBorderStyleNone;

            nTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

            nTextField.delegate = self;

            nTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

            nTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

            nTextField.textAlignment = UITextAlignmentLeft;

            nTextField.keyboardType = UIKeyboardTypeDefault;

            nTextField.placeholder = @"3-16个字符,不区分大小写";

            nTextField.font = [UIFont systemFontOfSize:12];

            [nTextField addTarget:self action:@selector(limitTextlength:)forControlEvents:UIControlEventEditingChanged];


-(BOOL)limitTextlength:(UITextField *)textField

{

    if ([textField.text length] >= 16) {

        show(@"只能输入6-16个字符");

        return NO;

    }

    return YES;

}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值