2009-09-16 11 views
9

Jestem całkiem nowy w rozwoju iPhone'a i mam to, co wydaje się być prostym pytaniem, którego nie mogę zrozumieć. Jak mogę sprawdzić, czy użytkownik wprowadza cyfrę i cyfrę dziesiętną w polu tekstowym?Jak zweryfikować dane wejściowe w UITextField (tj. Wprowadzeniu numerycznym)?

Próbowałem wielu różnych rzeczy, ale zamknięcia, które mogę uzyskać, pozwalają tylko na ciągi liczbowe w postaci: 5.34 lub 23.89. Potrzebuję go, aby zezwolić na liczby takie jak; 0,50 lub 432,30, po prostu coś z zerem jako ostatnią wartością wejściową. Próbowałem sprawdzić dane wejściowe ciągu, konwertując je na zmienną, a następnie z powrotem na ciąg znaków, ale uzyskałem wyżej wymienione wyniki.

KAŻDA pomoc byłaby świetna (to samo z przykładowym kodem!) DZIĘKI!

+2

Twój link prowadzi do nikąd ... –

Odpowiedz

1

Pytanie, które Dave DeLong próbował opublikować, to 1320295 i wygląda bardzo trafnie. To wydaje się być starym pytaniem, prawdopodobnie znalazłeś rozwiązanie, byłoby miło, gdybyś się nim podzielił, wszystko =)

1

Możesz rzucić zawartość swojego pola tekstowego w formacie float i sformatować go za pomocą poniższego kodu:

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

Jeśli chcesz zezwolić tylko wartości liczbowe w polu tekstowym, można po prostu Włóż z powrotem resultString w swoim textField więc wszelkie niedozwolone tekst zostanie zastąpiony przez sformatowanych wartości typu float.

Jeśli użytkownik wstawi "abc12.4", wynik będzie wynosił "0". Więc byłoby lepiej, gdyby użyć metody UITextFieldDelegate:

textField:shouldChangeCharactersInRange:replacementString: 

sprawdzić ostatni klucz wykorzystany przez użytkownika. Możesz go po prostu porównać, aby wiedzieć, czy jest to wartość liczbowa, czy punkt/przecinek.

13

Miałem podobny wymóg, a rozwiązanie ostatecznie okazało się dość banalne. Niestety, wiele pytań i odpowiedzi związanych z tym pytaniem dotyczy sprawdzania poprawności lub formatowania wartości liczbowych, a nie jakimi użytkownik mógłby wprowadzić dane.

Następujące wdrożenie metody delegatów shouldChangeCharactersInRange jest moim rozwiązaniem. Jak zwykle, w tej sytuacji porusza się funkcja RegularExpressions. RegExLib.com jest doskonałym źródłem przydatnych funkcji RegEx. Nie jestem guru RegEx i zawsze staram się je trochę połączyć, więc wszelkie sugestie, aby to poprawić, są mile widziane.

- (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; 
} 

Powyższy kod pozwala użytkownikowi na wprowadzenie tego rodzaju wartości: 1, 1.1, 1.11, .1, 0,11

+0

Greate, praca dla mnie .... zaoszczędzić mój czas .... :) – Dhaval

+0

Ten też przekazuje negatywowe płaszcze @ "^ (-)? ([0-9] +)? (\\. ([0-9] {1,2})?)? $ " –

Powiązane problemy