6

我有一个 UITextField 将包含高度值。我想在用户输入 UITextField 时格式化字段的值。例如,如果我想将值输入为“5 ft 10”,则流程将是:

1. Enter 5
2. " ft " is appended immediately after I type 5 with leading & trailing space.

我的代码如下所示:

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

if ( [string isEqualToString:@""] ) return YES;

// currHeight Formatting
if ( textField == currHeight )  { 
   if (currHeight.text.length == 1) {   
        currHeight.text = [NSString stringWithFormat:@"%@ ft ", currHeight.text];    
        }
}
return YES; 
}

我被卡在输入 5 的地方,什么也没发生。我必须点击任何按钮才能附加“ft”。

我可以在不点击任何东西的情况下做到这一点吗?

4

2 回答 2

6

-shouldChangeCharactersInRange 在文本字段发生更改之前被调用,因此长度仍为 0(请参阅使用 `textField:shouldChangeCharactersInRange:`,如何获取包含当前键入的字符的文本?)。试试这个:

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range
replacementString: (NSString*) string {
    if (textField == currHeight) {
        NSString *text = [textField.text stringByReplacingCharactersInRange:range
        withString: string];
        if (text.length == 1) { //or probably better, check if int
            textField.text = [NSString stringWithFormat: @"%@ ft ", text];
            return NO;
        }
    }
    return YES;
}  
于 2012-05-06T15:58:26.663 回答
1

调用此函数时,currHeight.text 的长度仍为 0。返回 YES 后,文本才更新为 5。

做你想做的事情的方法是测试 currHeight.text.length 是否为 0, string.length 为 1 并且字符串的第一个字符是数字。

于 2012-05-06T15:50:53.667 回答