今天咱们直入主题吧,来摆几个最近写的小分类,感觉还是挺好用的
NO1:限制输入框的字符数
做项目过程中,经常会遇到限制输入XX个字符的需求(中文两个字符,英文一个字符)。为此我分别给textField和textView写了一个分类,用来限制和裁剪字符数。
1、
首先,我们需要给分类里面添加一个属性,用来记录当前输入框的内容。
- 在.m文件里添加属性
@property (nonatomic,strong)NSString *endString;
- 用运行时来实现该属性的set和get方法
static char endStringKey;
-(void)setEndString:(NSString *)endString
{
objc_setAssociatedObject(self, &endStringKey, endString, OBJC_ASSOCIATION_COPY);
}
-(NSString *)endString
{
return objc_getAssociatedObject(self, &endStringKey);
}
2、
接下来,就该实现限制和裁剪字符数了
输入框是存在高亮状态和非高亮状态的,我们需要计算的是非高亮状态的字符串。具体代码如下
- (void)limitCharactersWithNumber:(NSInteger )number callbackHandler:(void (^)(BOOL isOverflow,NSInteger charCount))callback
{
UITextRange *selectedRange = [self markedTextRange];
//获取高亮部分
UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
/*计算中英文字符串长度 中文占2个字符*/
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSInteger len = [self.text lengthOfBytesUsingEncoding:enc];
self.attributedText = [self.text getNSAttributedStringWithTextViewDict:nil fontSize:ZGTextFont_13 textColor:[UIColor colorWithString:ZGColor_DarkGary333]];
if (len <= number) {
self.endString = self.text;
callback(NO,len);
}else{
self.text = self.endString;
NSInteger len = [self.text lengthOfBytesUsingEncoding:enc];
callback(YES,len);
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
此致,敬礼,收工~