我在些项目中多次对一些输入框做了相同的代码操作,终于有一天忍不住了,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 ( == [TF_STR length] ) { [TF resignFirstResponder];
[_scrolview setContentOffset:CGPointMake(, ) animated:YES]; }else{ [TF becomeFirstResponder];
[_scrolview setContentOffset:CGPointMake(, + ) 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

关于 jwTextFiled 的使用说明的更多相关文章

  1. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  2. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  3. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  4. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  5. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  6. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

  8. gdbsever 使用说明

    gdbsever 使用说明 在新塘N3292x平台下 编译 gdbsever ./configure --target=arm-linux --host=arm-linux arm-linux-gdb ...

  9. mongoVUE的增删改查操作使用说明

    mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...

随机推荐

  1. js 宽和高

    网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...

  2. PHP计算两个时间差的方法

    <?php //PHP计算两个时间差的方法 $startdate="2010-12-11 11:40:00"; $enddate="2012-12-12 11:45 ...

  3. Spark SQL之External DataSource外部数据源(二)源代码分析

    上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External Da ...

  4. python--函数嵌套 命名空间

    函数的嵌套调用 def func(): print(123) def func2(): func() print(345) func2() #结果:123 345 函数的嵌套定义 def func() ...

  5. ListView的异步载入(笔记,多线程和AsyncTask)

    异步载入最经常使用的两种方式: 多线程,线程池     AsyncTask 实例操作: 从一个站点上获取Json数据.然后将数据在ListView上显示. 1.创建item_layout布局 , 改动 ...

  6. Java解析Property文件

    在Java项目中一些配置參数保存在Property文件里,这样能保证不改动原代码直接改动Property文件. PropertyParser.java package com.discover.par ...

  7. 启动app-inspector报Internal Server Error

    前言 应用工具app-inspector可以协助定位IOS版App的控件元素,然鹅启动时报Internal Server Error! 解决办法 一.找到XCTestWD项目 目录: /usr/loc ...

  8. teradata培训文档 相关索引

    teradata培训文档 http://wenku.baidu.com/view/ec44c201cc175527072208ba.html Teradata 和Greenplum 的讨论 http: ...

  9. [转]***换机房换ip之后不能连外网

    ***换机房换ip之后不能连外网 时间 2015-07-21 15:17:16  Wendal随笔 原文  http://wendal.net/2015/07/21.html 主题 iptables ...

  10. [Phoenix] 四、加盐表

    摘要: 在密码学中,加盐是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串.这个在散列中加入字符串的方式称为“加盐”.其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情 ...