今天咱們直入主題吧,來擺幾個(gè)最近寫的小分類,感覺還是挺好用的
NO1:限制輸入框的字符數(shù)
做項(xiàng)目過程中,經(jīng)常會(huì)遇到限制輸入XX個(gè)字符的需求(中文兩個(gè)字符,英文一個(gè)字符)御蒲。為此我分別給textField和textView寫了一個(gè)分類,用來限制和裁剪字符數(shù)。
1、
首先,我們需要給分類里面添加一個(gè)屬性,用來記錄當(dāng)前輸入框的內(nèi)容。
- 在.m文件里添加屬性
@property (nonatomic,strong)NSString *endString;
- 用運(yùn)行時(shí)來實(shí)現(xiàn)該屬性的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、
接下來,就該實(shí)現(xiàn)限制和裁剪字符數(shù)了
輸入框是存在高亮狀態(tài)和非高亮狀態(tài)的,我們需要計(jì)算的是非高亮狀態(tài)的字符串。具體代碼如下
- (void)limitCharactersWithNumber:(NSInteger )number callbackHandler:(void (^)(BOOL isOverflow,NSInteger charCount))callback
{
UITextRange *selectedRange = [self markedTextRange];
//獲取高亮部分
UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字令漂,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
if (!position) {
/*計(jì)算中英文字符串長(zhǎng)度 中文占2個(gè)字符*/
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);
}
}
// 有高亮選擇的字符串,則暫不對(duì)文字進(jìn)行統(tǒng)計(jì)和限制
else{
}
}
此致,敬禮,收工~