前言
UITextField、UITextView字數輸入限制相信是大多數朋友項目開發(fā)中都會遇到的基本需求胶惰,網上的解決方案也挺多的哎迄,有采用Delegate的也有添加采用監(jiān)聽的方式谭贪。一開始小編也采用監(jiān)聽的方式蜡励,后面發(fā)現代碼看起來嫉妒不簡潔令花,使用起來也比較麻煩阻桅,所以進行了優(yōu)化。下面先介紹一開始采用的方式以及優(yōu)化的過程兼都,著急的盆友可以直接到查看文末嫂沉,也可以下載優(yōu)化后的文件哦~
監(jiān)聽方式
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.verificationTF];
- (void) textFieldDidChange:(NSNotification *)notification {
// 處理字數限制
}
以這種的話就得在需要字數限制的地方都得加上以上的監(jiān)聽和實現,所以是十分繁瑣扮碧。
分類方式
經過一番思考之后采用了分類+Runtime的方法趟章。具體實現如下:
- 給分類添加最長字數和編輯代理回調的屬性
typedef void(^UITextFieldLimitBlock)(void);
// 編輯代理回調
@property (nonatomic, copy) UITextFieldLimitBlock limitBlock;
/// 最長字數
@property (nonatomic, assign) int maxLength;
- 添加兩個調用方法
/**
字數限制-不自動裁剪
@param limitBlock UITextFieldLimitBlock
*/
- (void)lengthLimit:(UITextFieldLimitBlock)limitBlock;
/**
字數限制-自動裁剪
@param maxLength 最大長度
@param limitBlock UITextFieldLimitBlock
*/
- (void)lengthLimitWithMaxLength:(int)maxLength limitBlock:(UITextFieldLimitBlock)limitBlock;
- 利用Runtime給分類關聯對象
- (void)setLimitBlock:(UITextFieldLimitBlock)limitBlock
{
objc_setAssociatedObject(self, &limit, limitBlock, OBJC_ASSOCIATION_COPY);
}
- (UITextFieldLimitBlock)limitBlock
{
return objc_getAssociatedObject(self, &limit);
}
- (void)setMaxLength:(int)maxLength
{
objc_setAssociatedObject(self, &length, @(maxLength), OBJC_ASSOCIATION_COPY);
}
- (int)maxLength
{
NSNumber *maxLength = objc_getAssociatedObject(self, &length);
return [maxLength intValue];
}
- 調用方法如下
[self.textField lengthLimit:^{
// 處理字數改變
}];
Runtime真是個大寶貝,有何疑問或是有更好方法的盆友歡迎下方評論交流哦~
Demo地址:UITextField-Expand 喜歡的盆友可以給顆小星星哦~