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、stringの最初の文字が数値であるかどうかをテストすることです。

于 2012-05-06T15:50:53.667 に答える