Ricerca…


UITextField - Limita il testo a determinati caratteri

Se si desidera eseguire una convalida dell'input dell'utente del proprio campo di testo, utilizzare il seguente frammento di codice:

// MARK: - UITextFieldDelegate

let allowedCharacters = CharacterSet(charactersIn:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz").inverted    

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    let components = string.components(separatedBy: allowedCharacters)
    let filtered = components.joined(separator: "")
    
    if string == filtered {
        
        return true

    } else {
        
        return false
    }
}

Objective-C

#define ACCEPTABLE_CHARACTERS @"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  
{
      NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];

      NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

      return [string isEqualToString:filtered];
}

Inoltre, è possibile utilizzare i set di caratteri forniti da Apple per eseguire la convalida:

Dai un'occhiata a https://developer.apple.com/reference/foundation/nscharacterset

let allowedCharacters = CharacterSet.alphanumerics.inverted
let allowedCharacters = CharacterSet.capitalizedLetters.inverted

Trova tag successivo e gestisci tastiera

Il campo di testo chiama diversi metodi delegati (solo se i delegati sono impostati) Uno dei metodi delegati chiamati da textfield è * - (BOOL) textFieldShouldReturn: (UITextField ) textField

Questo metodo viene chiamato ogni volta che gli utenti toccano il pulsante di ritorno. Utilizzando questo metodo, possiamo implementare qualsiasi comportamento personalizzato.

Per esempio,

Nell'esempio seguente, il prossimo risponditore verrà individuato sulla base del tag e gestirà la tastiera. Qui 20 è la costante, mentre i tag assegnati al campo di testo sono come questo 50,70,90 ecc.

Qui trovando un nuovo oggetto textfield come responder, renderà il campo di testo corrente come nuovo risponditore e aprirà la tastiera di conseguenza.

 - (BOOL)textFieldShouldReturn:(UITextField *)textField {

                NSInteger nextTag = textField.tag+20;
                // Try to find next responder
                UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];
                if (nextResponder)
                {
                    // Found next responder, so set it.
                    [nextResponder becomeFirstResponder];
                }
                else
                {
                    // Not found, so remove keyboard.
                    [textField resignFirstResponder];
                }
                return YES;
            }

Azioni quando un utente ha iniziato / terminato l'interazione con un campo di testo

Per Swift 3.1:

Nel primo esempio si può vedere come si intercetta l'utente che interagisce con un campo di testo durante la scrittura. Allo stesso modo, ci sono metodi in UITextFieldDelegate che vengono chiamati quando un utente ha iniziato e terminato la sua interazione con un campo di testo.

Per poter accedere a questi metodi, è necessario conformarsi al protocollo UITextFieldDelegate e, per ogni campo di testo di cui si desidera ricevere una notifica, assegnare la classe padre come delegato:

class SomeClass: UITextFieldDelegate {
    
    @IBOutlet var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

}

Ora sarete in grado di implementare tutti i metodi UITextFieldDelegate.

Per ricevere una notifica quando un utente ha iniziato a modificare un campo di testo, è possibile implementare textFieldDidBeginEditing ( metodo _ :) in questo modo:

func textFieldDidBeginEditing(_ textField: UITextField) {
    // now you can perform some action 
    // if you have multiple textfields in a class, 
    // you can compare them here to handle each one separately
    if textField == emailTextField {
        // e.g. validate email 
    } 
    else if textField == passwordTextField {
        // e.g. validate password 
    } 
}

Allo stesso modo, se ti viene notificato se un utente ha interrotto l'interazione con un campo di testo, puoi utilizzare il metodo textFieldDidEndEditing (_ :) in questo modo:

func textFieldDidEndEditing(_ textField: UITextField) {
    // now you can perform some action 
    // if you have multiple textfields in a class, 
    // you can compare them here to handle each one separately
    if textField == emailTextField {
        // e.g. validate email 
    } 
    else if textField == passwordTextField {
        // e.g. validate password 
    } 
}

Se si desidera controllare se un campo di testo dovrebbe iniziare / terminare la modifica, i metodi textFieldShouldBeginEditing (_ :) e textFieldShouldEndEditing (_ :) possono essere utilizzati restituendo true / false in base alla logica richiesta.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow