//
// UITextField+Category.m
// StudentClient
//
// Created by 张宁宁 on 16/8/1.
// Copyright © lirenkj. All rights reserved.
//
#import "UITextField+Category.h"
@implementation UITextField (Category)
static NSString *kLimitTextLengthKey = @"kLimitTextLengthKey";
- (void)limitTextLength:(int)length{
objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey), [NSNumber numberWithInt:length], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self addTarget:self action:@selector(textFieldTextLengthLimit:) forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldTextLengthLimit:(id)sender
{
NSNumber *lengthNumber = objc_getAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey));
int length = [lengthNumber intValue];
//下面是修改部分
bool isChinese;//判断当前输入法是否是中文
NSArray *currentar = [UITextInputMode activeInputModes];
UITextInputMode *current = [currentar firstObject];
if ([current.primaryLanguage isEqualToString: @"en-US"]) {
isChinese = false;
}
else
{
isChinese = true;
}
if(sender == self) {
// length是自己设置的位数
NSString *str = [[self text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
if (isChinese) { //中文输入法下
// int chineseLength = length/2;
UITextRange *selectedRange = [self markedTextRange];
//获取高亮部分
UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
// if ( str.length>=length) {
int textcount = [self convertToInt:[self text]];
if ([self convertToInt:[self text]] >= length) {
NSString *strNew = [NSString stringWithString:str];
int chineseCount = [[NSString stringWithFormat:@"%lu",textcount - str.length] intValue];
int indexCount = (length/2 -(textcount - 2*chineseCount)/2 )+ (textcount - 2*chineseCount);
[self setText:[strNew substringToIndex:indexCount]];
}
}
else
{
// NSLog(@"输入的");
}
}else{
if ([str length]>=length) {
NSString *strNew = [NSString stringWithString:str];
[self setText:[strNew substringToIndex:length]];
}
}
}
}
-(int)convertToInt:(NSString*)strtemp {
int strlength = 0;
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return strlength;
}
@end