本文档主要描述 IQRuleValidationManager 在开发中的使用说明
验证 UITextField、UITextView 的输入时,需要在实现的方法中实现 UItextView 的 delegate 方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
BOOL validate = NO;
//验证条件
return Validate;
}
实现 UITextField 的 delegate 方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
BOOL validate = NO;
//验证条件
return Validate;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
BOOL validate = NO;
//验证条件
return Validate;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
BOOL validate = NO;
//验证条件
return Validate;
}
如果模块中较多地使用 UITextField、UITextView,同时验证的内容可能大部分相同,比如:长度限制、数字限定、小数点限制等。
为了统一处理 UITextField、UITextView 的内容,使得验证的方法可以统一管理,从而提出 IQRuleValidationManager
使用 UITextField、UITextView 的实现文件中 必须遵循 UItextViewDelegate/UITextFieldDelegate,在 IQRuleExpression 原理 中将会分析该规则,采用 UITextField、UITextView 的类别方法完成上述验证
@interface classA<UITextFieldDelegate>
@property(strong) UITextField *textField;
self.textField.ruleType = IQRuleValidationType中的一种类型
self.textField..delegate = self;
或使用
self.textField.ruleManagerClassName = @"自定义的规则名字";
self.textField..delegate = self;
IQRuleValidationManager 主要采用 swizzle 技术对于 遵循 UItextViewDelegate/UITextFieldDelegate 的类替换/添加相应的方法
默认实现 UITextFieldDelegate/UITextViewDelegate 的方法,提供 遵循 UItextViewDelegate/UITextFieldDelegate 的类为实现其协议方法时为其添加默认的实现方法,用于能够 swizzle 到相关的实现代码
实现 UITextField/UITextView 的具体规则,可以定义其基类,并实现 IQRuleValidationManager 协议
@protocol IQRuleValidationManager <NSObject>
@required
/**
* @brief 提供对应于IQRuleValidationType所处理的类名,继承的子类都必须提供该方法
*
* @return 类名
*/
+ (nonnull NSString *)validationClassName;
@optional
/**
* @brief 提供对应于IQRuleValidationType所处理的正则表达式,继承的子类都必须提供该方法
*
* @param type 定义的处理类型
*
* @return 返回正则表达式字符串
*/
- (nonnull NSString *)regularExpressionWhenChanged;
/**
* @brief 提供对应于IQRuleValidationType所处理的正则表达式,继承的子类都必须提供该方法
*
* @param type 定义的处理类型
*
* @return 返回正则表达式字符串
*/
- (nonnull NSString *)regularExpressionWhileEndEditing;
@end
默认的 IQRuleValidationManager 类提供了目前项目中用到的基本规则,主要定义在 IQRuleValidationType 中،该 IQRuleValidationType 的字段含义如下所示
typedef NS_ENUM(NSUInteger, IQRuleValidationType)
{
IQRuleValidationNone = 0,
IQRuleValidationNumber, // such as 1, 11,1111,11111
IQRuleValidationNumberWithTwoDecimalPoint, // such as 1.23, 11.23 111.23,1111.23
IQRuleValidationMobile, //
IQRuleValidationAlphaAndNumber, // such as a132,abcd1
IQRuleValidationAlpha, // such as Aa, AAa, AAAa
IQRuleValidationUppercaseAlpha, // such as A, AA, AAA
IQRuleValidationLowercaseAlpha, // such as a, aa, aaa
IQRuleValidationAlphaAndNumberAndUnderLine, // such a_43, a43, ab
IQRuleValidationMonthInYear, // such as 01, 02, 1, 2
IQRuleValidationDaysInMonth, // such as 1, 2, 3 ..31
IQRuleValidationEmail,
};
目前所用到的规则较少,暂代更新,欢迎各位大神对代码进行完善及提好的意见