使用Unit屏蔽UITextField中的数字输入

时间:2013-06-14 16:15:37

标签: objective-c formatting uitextfield

我用UIKeyboardTypeNumberPad创建了一个UITextField:

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

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

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

但是现在,我只能在上面的例子中输入一个数字而不是三个数字。

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

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

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

这应该有效:

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