1

我用 UIKeyboardTypeNumberPad 创建了一个 UITextField:

tf = [self makeTextField:self.groesse placeholder:@"erforderlich"];
[tf setKeyboardType:UIKeyboardTypeNumberPad];

现在,我试图屏蔽输入的数字,例如,它将显示187 cm在 UITextField 中。我试过了

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange (NSRange)range replacementString:(NSString *)string {
    if(textField == groesseField_) {
        textField.text = [NSString stringWithFormat:@"%@ cm",string];
        return NO;
    }
    return YES;
}

但是现在,对于上面的示例,我只能输入一位而不是三位。

有人可以帮助我,我做错了什么吗?- 谢谢。

4

2 回答 2

0

这是因为每次调用该方法时,变量string只包含最后一个字符。因此,您需要将此字符添加到您的文本字段中。

这应该有效:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange (NSRange)range replacementString:(NSString *)string {
    if(textField == groesseField_) {
        NSString *currentString = textField.text;
        if ([currentString isEqualToString:@""])
        {
            currentString = [NSString stringWithFormat:@"%@ cm",string];
        }
        else
        {
            currentString = [currentString stringByReplacingOccurrencesOfString:@" cm" withString:[NSString stringWithFormat:@"%@ cm", string]];
        }
        textField.text = currentString;
        return NO;
    }
    return YES;
}

此外,您应该编写特定的代码来维护退格按钮。但实际上,我宁愿cm在用户结束编辑时添加- (void)textFieldDidEndEditing:(UITextField *)sender

于 2013-06-14T16:46:39.547 回答
0

您需要结合文本字段中的当前文本和对范围进行的编辑来构建文本,然后添加您的后缀:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange (NSRange)range replacementString:(NSString *)string {

if(textField == groesseField_) {
    NSString *completeText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    textField.text = [completeText stringByAppendingString:@" cm",];
    return NO;
}
return YES;

}
于 2013-06-14T16:36:36.023 回答