2009-09-16 18 views
9

私はiPhone開発の新人です。私は理解できないという簡単な質問があるようです。ユーザーがテキストフィールドに数字と小数を入力したことを確認するにはどうすればよいですか?UITextFieldで入力を確認する方法(数値入力)

私は多くの異なることを試しましたが、私が得ることができるクローズは、フォームの数値ストリングのみを許可します:5.34または23.89。私は次のような数字を許可する必要があります。 0.50または432.30、最後の入力値としてゼロを持つもの。私は文字列をfloatに変換してから文字列に戻して調べてみましたが、上記の結果を得ました。

ANYヘルプは素晴らしいでしょう(サンプルコードと同じです)。ありがとうございます!

+2

あなたのリンクはどこにもつながりません... –

答えて

1

Dave DeLongが投稿しようとしていた質問は1320295であり、非常に関連しています。 これは古い質問をのように見える、ホードは、おそらくあなたが共有している場合、あなたのソリューションは、いいだろう見つけ、それはあなたが以下のコードを使用することによりフロートにあなたのテキストフィールドの内容をキャストし、それをフォーマットすることができ

1

すべて=):

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

あなたのテキストフィールドで数値のみを許可したい場合は、あなただけの任意の許可されていないテキストがフォーマットされた浮動小数点値に置き換えられますので、あなたのテキストフィールドにresultStringをreputすることができます。

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

textField:shouldChangeCharactersInRange:replacementString: 

ユーザーがタップした最後のキーを確認してください。あなたはそれが数値か点/カンマかを比較することができます。

13

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

次のshouldChangeCharactersInRangeデリゲートメソッドの実装は私のソリューションです。いつものように、RegularExpressionsはこの状況で揺れ動います。 RegExLib.comは有用なRegExの優れた情報源です。私はRegExの専門家ではなく、常にそれらをまとめていくために少しでも苦労しているので、それを改善するための提案は大歓迎です。

- (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、0.1、0.11

+0

greateの、私のために仕事....保存私の時間.... :) – Dhaval

+0

これはまた、負の浮動小数点@ "^( - )?([0-9] +)?\\。([0-9] {1,2})?)? $ " –

関連する問題