9

私はiPhone開発にかなり慣れていないので、理解できない単純な質問のように思えます。ユーザーが数値と小数をテキスト フィールドに入力したことを確認するにはどうすればよいですか?

私はさまざまなことを試しましたが、取得できる終了は、5.34 または 23.89 の形式の数値文字列のみを許可します。次のような数字を許可する必要があります。0.50 または 432.30、最後の入力値がゼロの何か。文字列入力をfloatに変換してから文字列に戻すことで文字列入力を確認しようとしましたが、上記の結果が得られました。

どんな助けでも素晴らしいでしょう (サンプル コードと同じです!) ありがとう!

4

3 に答える 3

13

同様の要件がありましたが、最終的に解決策はかなり簡単であることがわかりました。残念ながら、この質問に関連する多くの質問と回答は、ユーザーが入力できる内容を制御することではなく、数値の検証または書式設定に関するものです。

次の shouldChangeCharactersInRange デリゲート メソッドの実装が私の解決策です。いつものように、RegularExpressions はこの状況でうまく機能します。RegExLib.com は、便利な正規表現の優れた情報源です。私は正規表現の第一人者ではなく、それらをまとめるのに常に少し苦労しているので、改善するための提案は大歓迎です。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.quantityTextField)
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

        NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";
        NSError *error = nil;

        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                                                                               options:NSRegularExpressionCaseInsensitive 
                                                                                 error:&error];
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                            options:0
                                                              range:NSMakeRange(0, [newString length])];        
        if (numberOfMatches == 0)
            return NO;        
    }

    return YES;
}

上記のコードでは、ユーザーは次の種類の値を入力できます: 1、1.1、1.11、.1、.11

于 2012-02-19T20:27:24.677 に答える
1

Dave DeLong が投稿しようとしていた質問は1320295で、非常に関連性が高いようです。これは古い質問のようです。おそらく解決策を見つけたでしょう。すべてを共有していただければ幸いです =)

于 2010-02-16T19:18:27.067 に答える
1

以下のコードを使用して、テキストフィールドのコンテンツを float にキャストし、フォーマットすることができます。

float myFloat = [myTextField floatValue];
NSString *formatString = [NSString stringWithFormat:@"%%1.%if", 2]; //2 decimals after point
NSString *resultString = [NSString stringWithFormat:formatString, myFloat];

テキストフィールドに数値のみを許可する場合は、結果の文字列をテキストフィールドに返すだけで、許可されていないテキストがフォーマットされた浮動小数点値に置き換えられます。

ユーザーが「abc12.4」と入力すると、結果は「0」になります。したがって、UITextFieldDelegate メソッドを使用する方がよいでしょう。

textField:shouldChangeCharactersInRange:replacementString:

ユーザーが最後にタップしたキーを確認します。それを比較するだけで、それが数値なのかポイント/コンマなのかを知ることができます。

于 2010-02-19T08:57:25.117 に答える