0

私は自分のフットボール クラブがお互いにちょっとした賭けをするためのアプリを作っています。ユーザーから価格入力を受け取る方法を見つけようとしています。N(X).XX数値は、小数点の前に X がいくつあっても問題ない形式にする必要があります。いくつかのオプションについて考えましたが、どれが最適かを判断するのに十分な経験がありません.

これまで考えたこと:

  1. 数字キーパッドを表示するテキスト フィールドを作成します。それから私は使用できます[numberFormatter numberFromString: text];。ただし、これは少しリスクが高すぎるようです。たとえば、ユーザーが何かを入力したXX.XXX場合、アプリはそれらの値を受け入れるため、後で問題が発生します。X.XX.X

  2. 私が持っていたもう 1 つのアイデアは、ある種のピッカーを使用することでしたが、固定された値のセットに制限されます。

おすすめは何ですか?おそらく、テキスト フィールドを使用して正しい形式の入力をチェックすることになると思いますが、それをどのように行うかは完全にはわかりません。

編集: eBay アプリをチェックしたところ、とてもいい方法でそれを行うことができました。小数点以下 2 桁に制限されたテキスト フィールドを使用します。一体どうやってそれをプログラムするのでしょうか?

4

2 に答える 2

2

テンキーには「.」がありません。同様の状況で、数字と句読点のキーボードを使用し、UITextFieldDelegate メソッドを実装する必要がありました

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

そこで、数値または「。」以外の文字をブロックしました。

私のコードは次のとおりです。このアイデアは、stackoverflow に関する別の回答から生まれましたが、今は見つけられないので、それを提供してくれた人に敬意を表します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length] == 0)
        return YES;

    if ([textField keyboardType]==UIKeyboardTypeNumbersAndPunctuation)
    {
        NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"."];

        NSCharacterSet *numberSet = [NSCharacterSet decimalDigitCharacterSet];
        [_alnum formUnionWithCharacterSet:numberSet];
        NSCharacterSet *nonNumberSet = [_alnum invertedSet];

        return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
    }else{
        return YES;
    }
}

この同じ方法で、同様の方法で textField.text をチェックして、小数点以下の桁数を確認し、それ以上の入力をブロックできます。

于 2012-11-29T14:27:17.720 に答える
1

@SteveCの正解に基づいて構築するには、小数点以下の桁数だけでなく制限するために、いくつかの追加チェックが必要です。しかし、小数点の数(元の質問で述べたように):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length] == 0)
        return YES;
    NSInteger firstDecimalLocation = [[textField text] rangeOfString:@"."].location;
    if( firstDecimalLocation != NSNotFound ) {
        if( [string isEqualToString:@"."] ) {
            return NO;
        }
        if( firstDecimalLocation == range.location - 3 ) {
            return NO;
        }
    }
    NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"."];

    NSCharacterSet *numberSet = [NSCharacterSet decimalDigitCharacterSet];
    [_alnum formUnionWithCharacterSet:numberSet];
    NSCharacterSet *nonNumberSet = [_alnum invertedSet];


    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}

UIKeyboardTypeNumbersAndPunctuationこれは、メソッドでテストするのではなく、を使用していることを前提としていることに注意してくださいUITextFieldDelegate

于 2012-11-29T14:43:58.510 に答える