700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > UITextField输入字符限制 中英文混排

UITextField输入字符限制 中英文混排

时间:2024-09-04 14:57:25

相关推荐

UITextField输入字符限制 中英文混排

//

// 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。