Vai al contenuto

Validazione input tastiera iphone


Messaggi raccomandati

Come faccio a fare in modo che in una textField vengano inseriti soltanto numeri, ',' e '-'?

In c# è semplice:

 

private void txtCoefficienteA_KeyPress(object sender, KeyPressEventArgs e)

{   // la variabile ch contiene il codice del tasto premuto

            char ch = e.KeyChar;

            if (ch == 8)// il tasto BACKSPACE permette la cancellazione se si sbaglia l'inserimento

                     return;

            if (char.IsDigit(ch) == false && ch != ',' && ch != '-')

               e.Handled = true;//scarto il carattere digitato

            if (ch == '-' && txtCoefficienteA.Text != "") e.Handled = true;//controllo che il carattere '-' sia digitato soltanto a textbox vuota

            if (ch == ',')//controllo che il carattere ',' sia digitato solo una volta

            {

                int i;

                for (i = 0; i < txtCoefficienteA.TextLength; i++)

                    if (txtCoefficienteA.Text.Substring(i, 1) == ",") e.Handled = true;

            }

        }

}

 

 

in objective-c invece non riesco a fare il controllo sul rispettivo ascii del char, quindi ho provato così:

 

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

{

    NSString *sRisultante = [textField.text stringByReplacingCharactersInRange: range withString: string];

    NSInteger holder;

    NSScanner *scan = [NSScanner scannerWithString: sRisultante];

    return [scan scanInteger: &holder] && [scan isAtEnd];

 }

nel ViewController.m

Però non mi lascia scrivere il meno e la virgola perchè non sono numeri.

Link al commento
Condividi su altri siti

Non basta sull'interfaccia settare la tastiera come numeric?

É un po' che non programmo per iPhone, quindi magari esiste un modo per "bypassare" questa forzatura (magari con un paste? non ho mai provato..).

 

Alternativamente per qualcosa di "complesso" usa regex come suggerito da Sam88, oppure NSScanner

Link al commento
Condividi su altri siti

quindi controllo l'input dopo e mando un messaggio di avviso se contenuto errato.

Non ho capito come usare NSRegularExpression, devo dichiarare un istanza?

 

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:self.TxtCoefficenteA.text options:<#(NSRegularExpressionOptions)#> error:<#(NSError *__autoreleasing *)#>];

 

Io volevo riuscire ad ottenere il carattere del tasto premuto e decidere se scriverlo o no. Dello scan ho trovato il metodo IsEqual, ma non riesco a usarlo perchè confronta il mio scan con un oggetto di tipo id

 

E come faccio a settare la tastiera come numeric?

Link al commento
Condividi su altri siti

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
      NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"-?[0-9]+(?:\,[0-9]*)?" options:NSRegularExpressionCaseInsensitive error:&error];

    NSTextCheckingResult *match = [regex firstMatchInString:textField.text options:0 range:NSMakeRange(0, [string length])];

   return match;
 }

 

Questo pezzo di codice dovrebbe fare al caso tuo.

 

le stringhe accettate per esempio saranno:

123

123,45

-123

 

Se non è proprio ciò che volevi ottenere modifica la regular expression.

 

Un tool molto utile online per validare le regular expressions è questo.

 

Per quanto riguarda la visualizzazione della tastiera UITextField ha la proprietà keyboardType. Settando questa proprietà cambia la visualizzazione della tastiera per quel textfield.

Mobile & Web Developer | samuele@mr-apps.comMr.Apps

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...