0

次のリンクを使用して、現地通貨記号とカンマの UItextField をカスタマイズしています。

http://www.thepensiveprogrammer.com/2010/03/customizing-uitextfield-formatting-for.html

NSNumber *actualNumber = [currencyFormatter numberFromString:[mstring
                                      stringByReplacingOccurrencesOfString:localeSeparator withString:@""]];

iOS 5 では、この実際の数値は常に null であり、iOS 4.x では問題なく動作しています。

この目的のための私のコードの主な方法は次のとおりです。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.tag == 1)
    {
        if(true)
        {
            NSMutableString* mstring = [[textField text] mutableCopy];
            if([mstring length] == 0)
            {
                //special case...nothing in the field yet, so set a currency symbol first
                [mstring appendString:[[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]];

                //now append the replacement string
                [mstring appendString:string];
            }
            else
            {
                //adding a char or deleting?
                if([string length] > 0)
                {
                    [mstring insertString:string atIndex:range.location];
                }
                else 
                {
                    //delete case - the length of replacement string is zero for a delete
                    [mstring deleteCharactersInRange:range];
                }
            }

            NSString* localeSeparator = [[NSLocale currentLocale]
                                         objectForKey:NSLocaleGroupingSeparator];

            NSNumber *actualNumber = [currencyFormatter numberFromString:[mstring
                                                                    stringByReplacingOccurrencesOfString:localeSeparator
                                                                    withString:@""]];
            NSLog(@"%@",actualNumber);

            [textField setText:[currencyFormatter stringFromNumber:actualNumber]];

            [mstring release];
        }

        //always return no since we are manually changing the text field
        return NO; 
    }
    else
    {
        return YES;
    }
}

これは初期化です

NSLocale *paklocal = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_PAK"] autorelease];
currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormatter setMaximumFractionDigits:0];
[currencyFormatter setLocale:paklocal];

NSMutableCharacterSet *numberSet = [[NSCharacterSet decimalDigitCharacterSet] mutableCopy];
[numberSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
nonNumberSet = [[numberSet invertedSet] retain];
[numberSet release];
4

1 に答える 1

2

で使用されるロケールとは異なる可能性があるtextField:shouldChangeCharactersInRange:replacementString:の通貨記号を追加するため、問題が発生していると思います。私のコンピューターのシミュレーターでは、 $ (ドル) 記号を に追加しましたが、これは currencyFormatter によって論理的に十分に拒否されました。[NSLocale currentLocale]currencyFormattermstring

を構築するときはpaklocal、 とともに保存し、currencyFormatterの代わりに使用します[NSLocale currentLocale]

にさらに問題がある場合はcurrencyFormatter、 を使用NSLogして、送信した文字列を表示します。

于 2012-04-07T23:27:53.240 に答える