一个汉字占两个字符长度
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"签名" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput; //设置AertView的样式,带有一个输入框alertView.delegate = self;
[[alertView textFieldAtIndex:0] addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; //给alertView的textField添加一个事件 因为TextField没有didChange方法
//alertView的textField的响应事件
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField.markedTextRange == nil) { //输入中文时,当英文转为中文后再调用convertToInt::事件
textField.text = [self convertToInt:textField.text :64];
}
}
- (NSString *)convertToInt:(NSString *)text :(int)length
{
int i, n = [text length], l = 0, a = 0, b = 0;
int len = 0;
unichar c;
for (i = 0; i < n; i++) {
c = [text characterAtIndex:i];
if (isblank(c)) { // 判断输入的字符是否为空格或者换行
b++;
} else if (isascii(c)) { // 判断输入的字符是否为英文
a++;
} else { // 判断输入的字符是否为中文
l++;
}
len = l * 2 + (int)ceilf((float) (a + b)); // ceilf去最接近的较大整数
if (len > length) {
[[UIApplication sharedApplication].keyWindow makeToast:[NSString stringWithFormat:@"最多只允许输入%d个英文字符,汉字占两个字符", length] duration:defaultDuration position:@"center"];
return [text substringToIndex:i];
}
}
if (a == 0 && l == 0) {
return text;
}
return text;
}
{
int i, n = [text length], l = 0, a = 0, b = 0;
int len = 0;
unichar c;
for (i = 0; i < n; i++) {
c = [text characterAtIndex:i];
if (isblank(c)) { // 判断输入的字符是否为空格或者换行
b++;
} else if (isascii(c)) { // 判断输入的字符是否为英文
a++;
} else { // 判断输入的字符是否为中文
l++;
}
len = l * 2 + (int)ceilf((float) (a + b)); // ceilf去最接近的较大整数
if (len > length) {
[[UIApplication sharedApplication].keyWindow makeToast:[NSString stringWithFormat:@"最多只允许输入%d个英文字符,汉字占两个字符", length] duration:defaultDuration position:@"center"];
return [text substringToIndex:i];
}
}
if (a == 0 && l == 0) {
return text;
}
return text;
}