限制UIAlertView上的TextField的输入字符长度

一个汉字占两个字符长度

 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;
}

你可能感兴趣的:(ios,uialertview,textfield)