Format ein UITextField für die Währung

Habe ich ein UITextField auf meine Anwendung, die erhält nur die numerische Eingabe von dem Benutzer. Dieses numerische Eingabe stellt eine Währung dar und haben den default-Wert von 0,00.

Ich würde gern so etwas wie eine Maske zur Formatierung der UITextField-als Benutzer geben Sie die zahlen. Zum Beispiel:

9 wird zu $0,09
99 wird zu $0,99
999 wird zu $999,99

Den code unten funktioniert Super, aber wie ich bin, mit integer-und float-Werte, die app wird irgendwann die Anzeige falsche Werte afeter einem bestimmten Punkt. Zum Beispiel:

999999999 wird 100000000

Passiert, weil flot " und "integer" nicht präzise genug und NSDEcimalNumber verwendet werden soll. Der Punkt ist, dass ich kann nicht herausfinden, wie zu ersetzen mein Integer-zahlen und float-Werte zu NSDecimalNumber lieben.

Kennt jemand konnte mir eine hand, um dieses Problem zu lösen? Ich verbringe einige Zeit auf der Suche im Internet nach einer Lösung aber nicht finden, das passt zu meinen Bedürfnissen und Tonnen von Menschen mit dem gleichen problem.

Hier ist der code:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag == 1){
    NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
    NSInteger centValue= cleanCentString.integerValue;

    if (string.length > 0)
    {
        centValue = centValue * 10 + string.integerValue;
    }
    else
    {
        centValue = centValue / 10;
    }

    NSNumber *formatedValue;
    formatedValue = [[NSNumber alloc] initWithFloat:(float)centValue / 100.0f];
    NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
    [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    textField.text = [_currencyFormatter stringFromNumber:formatedValue];
    return NO;
}

if (textField.tag == 2){
    //Nothing for now
}

return YES;
}
  • Sie haben ein größeres Problem. Sie sind, vorausgesetzt, die Währung eingegeben werden, die in von 100stel Währung Wert wie Cent. Die Menschen in Japan nicht zufrieden sein, da der japanische Yen ist nur in ganzen Yen, zum Beispiel. Sie sollten befragen die Anzahl formatter nach der Einstellung von Währung-Stil und sehen Sie, wie viele Dezimalstellen Sie setup für.
  • Du hast Recht, rmaddy. Wieder melden sich immer größer =D
  • Ich persönlich denke, es ist besser, lassen Sie einfach das Benutzer-Typ in ein rohes Nummer ohne "format as you go" - Verarbeitung. Nicht format die raw-Zahl, bis der Benutzer verlässt das Feld text ein. Als Nutzer würde ich mir eher geben Sie in das Dezimaltrennzeichen, als ich eigentlich möchte eine Dezimalzahl. Wenn ich Typ 9 dann meine ich in neun US-Dollar, nicht neun Cent. Wenn ich will, neun Cent dann möchte ich geben .09. Lassen Sie die post-processing-format, das zum $0.09 oder was auch immer nachdem ich fertig bin mit der Eingabe. Mach mich nicht geben 900 um neun Dollar. Aber das ist nur eine Meinung.
  • Gut, das ist ein interessanter Punkt. Vielleicht ist es auch besser.
  • ich m mit ur-Methode und habe dasselbe Problem. ich überprüfe die unten Antwort aber irgend wie kann ich nicht beheben. kann u bitte helfen Sie mir auf dies. kann u bitte Bearbeiten Sie die gleiche Methode mit Korrektur.
InformationsquelleAutor Carlos | 2014-01-12
Schreibe einen Kommentar