Home / Programmazione / Objective-C / Permettere solo numeri in UITextField
Mattepuffo

Permettere solo numeri in UITextField

Permettere solo numeri in UITextField

L'esigenza nasce dal datto che nella schermata di registrazione che sto facendo per una app per iPad, devo permettere solo numeri.

Questo perchè il campo corrisponde a quello del numero di telefono.

Per farlo è necessario usare il metodo shouldChangeCharactersInRange; ma andiamo con ordine e partiamo dal file .h:

#import <UIKit/UIKit.h>

@interface ControllerPrivateReg : UIViewController <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UITextField *txtTelephone;

@end

Dobbiamo implementare il protocollo UITextFieldDelegate, per il resto non ci serve altro che il riferimento alla nostra UITextField.

A questo punto nel file di implementazione ci basterà aggiungere questo metodo, da mettere prima del metodo viewDidLoad:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    /* for backspace */
    if([string length]==0){
        return YES;
    }
    
    /*  limit to only numeric characters  */
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++) {
        unichar c = [string characterAtIndex:i];
        if ([myCharSet characterIsMember:c]) {
            return YES;
        }
    }
    return NO;
}

Diciamo che questa soluzione è abbastanza flessibile in quanto ci basterà aggiungere altri caratteri in NSCharacterSet.

A questo punto dobbiamo agganciare questo metodo alla UITextField; per farlo nel viewDidLoad:

- (void)viewDidLoad
{
    txtTelephone.delegate = self;
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

Impostiamo il delegate sulla UITextField.

A questo punto avviate il simulatore, mettetvi sulla casella di testo e provare a usare un qualsiasi altro carattere; se il tutto è corretto non verrà permesso altro che numeri.