2009-09-16 13 views
9

Sono abbastanza nuovo per lo sviluppo di iPhone e ho quello che sembra essere una semplice domanda che non riesco a capire. Come posso verificare che un utente inserisca un numero e un decimale nel campo di testo?Come verificare l'input in UITextField (ad esempio, input numerico)

Ho provato molte cose diverse ma il closes posso ottenere solo per stringhe numeriche del modulo: 5.34 o 23.89. Ne ho bisogno per consentire numeri come; 0,50 o 432,30, solo qualcosa con uno zero come ultimo valore di input. Ho tentato di verificare l'input della stringa convertendolo in float e quindi di tornare a una stringa, ma ottenere i risultati sopra indicati.

QUALSIASI aiuto sarebbe fantastico (lo stesso con codice di esempio!) GRAZIE!

+2

Il link porta da nessuna parte ... –

risposta

1

La domanda che Dave DeLong stava cercando di pubblicare è 1320295 e sembra molto pertinente. Questa sembra essere una vecchia domanda, probabilmente hai trovato la soluzione, Sarebbe bello se la condividessi sarà tutto =)

1

Puoi trasmettere il contenuto del tuo campo di testo in float e formattarlo usando il codice sottostante:

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

Se si desidera consentire solo valori numerici nel vostro campo di testo, si può solo reput il ResultString nel vostro textField in modo che qualsiasi testo non ammessi verrà sostituito dal valore float formattato.

Se l'utente inserisce "abc12.4" il risultato sarà "0". Quindi sarebbe meglio se si utilizza il metodo UITextFieldDelegate:

textField:shouldChangeCharactersInRange:replacementString: 

per controllare l'ultima chiave sfruttato dall'utente. Puoi semplicemente confrontarlo per sapere se si tratta di un valore numerico o un punto/virgola.

13

Avevo un requisito simile e alla fine la soluzione si rivelò piuttosto banale. Sfortunatamente molte domande e risposte relative a questa domanda riguardano la convalida o la formattazione di valori numerici, non che controllano ciò che un utente può immettere.

La seguente implementazione del metodo delegato shouldChangeCharactersInRange è la mia soluzione. Come sempre, RegularExpressions si comporta in questa situazione. RegExLib.com è un'ottima fonte di utili RegEx. Non sono un guru RegEx e faccio sempre fatica a metterli insieme, quindi ogni suggerimento per migliorarlo è il benvenuto.

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

Il codice di cui sopra permette all'utente di inserire questi tipi di valori: 1, 1.1, 1.11, .1, .11

+0

Greate, lavoro per me .... salvare il mio tempo .... :) – Dhaval

+0

Questo passa anche float negativi @ "^ (-)? ([0-9] +)? (\\. ([0-9] {1,2})?)? $" –

Problemi correlati