关于 jwTextFiled 的使用说明
我在些项目中多次对一些输入框做了相同的代码操作,终于有一天忍不住了,MD必须写一个小的框架解决这个搬砖的问题。经过一天的战斗,于是 jwTextFied 就默默的诞生了。
地址:https://github.com/NIUXINGJIAN/jwTextFiled.git
使用它的好处:节省代码,简化操作,凸显 ViewController 内部逻辑。
如何使用它:
a: 进入gitHub 地址,然后下载它。
b: 将demo中 jwTextFiled 文件夹导入工程。
c: 在使用的地方引入头文件 #import "jwTextFiled.h" 即可,耦合度相当低。
d: 查阅 jwTextFiled_Example 使用步骤。
解析:
一个 Categorie ,没错就是一个 UITextFiled 的类扩展,我们将所有的输入框类型的校验写在该扩展中,同时具有较强的定制性。
一个黑框提示的封装,做为提示效果之一。
一个多按钮的提示框的引入,作为可以定制的提示效果之一。
jwTextFiled 可以帮你做什么?
0、使用极少的代码实现对一个或者一组输入框的输入长度做输入限制。
1、支持输入框类型为:用户名,密码,验证码,交易金额,身份证,银行卡,手机号,邮箱,信用卡有效期,信用卡安全码输入框正则校验,根据需要你可以自行扩展修改。
2、支持错误校验规则:详见代码内部正则注释。
3、提示类型:不提示,默默校验;校验并且提示(支持系统提示,黑框提示,用户自定义提示)
4、提示内容:通过函数传值,能够对校验失败,和输入框为空的时候进行提示。
5、对输入框当前输入内容的回调,通过一次遍历,能够得到所有输入框及时的输入信息。
6、封装倒计时控件,采用target-action设计思想很好的解决了多次重发的问题。
7、引入反馈页面使用的效果 UIPlaceholderTextView 文件。
8、自动获取输入框的内容,能够帮助你做一些你想做的事情:效果如下 code
//如,短信验证码页面,初始化了jwTextFiled 设置后,当进入该页面后,自动获取验证码成功后,验证码输入框智能获取焦点,键盘出现,页面自动偏移,当输入够6位的时候,输入框取消焦点,键盘消失,页面回复原来位置。 -(void)intelligentSwitchInputBox:(BOOL)isOpen{ if (isOpen) { _smCode_TF.tempBlock = ^(UITextField *TF,NSString *TF_STR){ if (TF == _smCode_TF) {// 验证码长度为6自动回收键盘 if ( 6 == [TF_STR length] ) { [TF resignFirstResponder]; [_scrolview setContentOffset:CGPointMake(0, 0) animated:YES]; }else{ [TF becomeFirstResponder]; [_scrolview setContentOffset:CGPointMake(0, 20 + 58) animated:YES]; } } }; } }
9、改良自定义输入框辅助工具,新增自动获取用户输入焦点的方法,在VC中仅需一行代码,实现页面的输入框的智能切换焦点。{设计实现:如果输入长度达到最大长度就按照输入框的数组由上到下的去自动获取焦点,使用场景,多于三个输入框的页面}。
实例代码:[_smCode_TF jw_AutoGetFocusTfAry:_tfAry start:0];
定制性:
用户可以在框架的内部去通过修改宏定义去设置输入框的最大输入长度限制。
用户可以修改调整输入框的校验方法去对某些输入框进行校验设置。
注意:
金额输入框输入规则:
1、首位输入小数点,自动前面补0。
2、只能输入一位小数点,若连续两次输入小数点,禁止第二个输入。
3、小数位只能有两位,多余输入自动禁止。
4、输入金额限制的最后一位的时候如果是小数点,就进行提示,并删除小数点。
身份证输入框输入规则:
1、最多能输入18位。
2、如果最后以为是小写x,则自动转化为大写 X。
3、对18位长度的身份证号码做了组成身份证算法校验。
其他这里不再一一概述。
【注意**】
未能解决的bug:
*在输入中文的时候,由系统键盘的文字联想效果导致的输入不准确。
// // AddBankCardViewController.m // xxxxx // // Created by Mac_NJW on 16/9/18. // Copyright © 2016年 Mac_NJW. All rights reserved. // // 校验错误 #define K_ERROR_HOLDNAME @"持卡人姓名输入错误!" #define K_ERROR_IDCARD @"身份证号码格式不正确!" #define K_ERROR_BANKCARD @"银行卡号格式不正确!" #define K_ERROR_PHONENUM @"手机号码格式不正确!" // 校验位空 #define K_NULL_HOLDNAME @"持卡人姓名不能为空!" #define K_NULL_IDCARD @"身份证号码不能为空!" #define K_NULL_BANKCARD @"银行卡号不能为空!" #define K_NULL_PHONENUM @"银行预留手机号不能为空!" #import "AddBankCardViewController.h" #import "jwTextField.h" @interface AddBankCardViewController () { NSArray *_tfAry; } @end @implementation AddBankCardViewController - (void)viewDidLoad { [super viewDidLoad]; [self initWithUi]; } - (void)initWithUi{ [self setTitle:@"绑定银行卡"]; // 及时监听输入内容 _tfAry = @[_hold_Name_TF,_idCard_TF,_bankCardNo_TF,_phone_TF]; // 设置类型 [_hold_Name_TF jwTextFiledType:TEXTFIELD_TYPE_LOGIN_U]; [_idCard_TF jwTextFiledType:TEXTFIELD_TYPE_IDCARD]; [_bankCardNo_TF jwTextFiledType:TEXTFIELD_TYPE_BANKRD]; [_phone_TF jwTextFiledType:TEXTFIELD_TYPE_PHONE]; for (UITextField *textFiled in _tfAry) { // 及时监听 textFiled.tempBlock = ^(UITextField *TF,NSString *TF_STR){ NSLog(@"\n\n 及时检测到您输入的内容为 %@",TF_STR); if (TF.textFiled_Type == TEXTFIELD_TYPE_IDCARD) { NSLog(@"\n\n 系统检测到您正在输入身份证号码!\n"); } }; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark——————— 下一步按钮点击事件 - (IBAction)nextBtnClickAct:(UIButton *)sender { // 轮询校验 _tfAry = @[_hold_Name_TF,_idCard_TF,_bankCardNo_TF,_phone_TF]; NSArray *_errorAry = @[K_ERROR_HOLDNAME,K_ERROR_IDCARD,K_ERROR_BANKCARD,K_ERROR_PHONENUM]; NSArray *_nilAry = @[K_NULL_HOLDNAME,K_NULL_IDCARD,K_NULL_BANKCARD,K_NULL_PHONENUM]; BOOL is_ok = [_hold_Name_TF pollingCheckTextFiled:_tfAry isHaveBox:ISHAVE_BOX_TYPE_YES haveBoxTitles:_errorAry nullWarTitles:_nilAry withBoxType:WARING_BOX_TYPE_BLACKBX keepara:@"YES"];// 如果是 @"YES" 就是开启错误定位 if (is_ok) { NSLog(@"\n\n 所有输入合法,可以继续执行逻辑!\n"); }else{ NSLog(@"\n\n 检测到有不合法输入,不可以继续执行逻辑!\n"); } } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end