Zoeken…


UITextField - Beperk tekstveld tot bepaalde tekens

Als u een gebruikersinvoervalidatie van uw tekstveld wilt uitvoeren, gebruikt u het volgende codefragment:

// 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
    }
}

Doelstelling 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];
}

Daarnaast kunt u ook tekensets van Apple gebruiken om validatie uit te voeren:

Kijk op https://developer.apple.com/reference/foundation/nscharacterset

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

Volgende tag zoeken en toetsenbord beheren

Het tekstveld roept verschillende gedelegeerde methoden aan (alleen als gedelegeerden zijn ingesteld) Een van de gedelegeerde methoden genoemd door textfield is * - (BOOL) textFieldShouldReturn: (UITextField ) textField

Deze methode wordt aangeroepen wanneer gebruikers op de retourknop tikken. Door deze methode te gebruiken, kunnen we elk aangepast gedrag implementeren.

Bijvoorbeeld,

In het onderstaande voorbeeld zal de volgende responder te weten komen op basis van tag en het toetsenbord beheren. Hier is 20 de constante, omdat de tag die is toegewezen aan textfield als deze 50,70,90 enz. Is.

Hier wordt bij het vinden van een nieuw tekstveldobject als responder het huidige tekstveld als nieuwe responder gemaakt en wordt het toetsenbord dienovereenkomstig geopend.

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

Acties wanneer een gebruiker interactie met een tekstveld is begonnen / beëindigd

Voor Swift 3.1:

In het eerste voorbeeld kun je zien hoe je de gebruiker zou onderscheppen die interactie heeft met een tekstveld tijdens het schrijven. Evenzo zijn er methoden in de UITextFieldDelegate die worden aangeroepen wanneer een gebruiker zijn interactie met een TextField is gestart en beëindigd.

Om toegang te krijgen tot deze methoden, moet u voldoen aan het UITextFieldDelegate- protocol, en voor elk tekstveld waarover u een melding wilt ontvangen, wijst u de bovenliggende klasse toe als gemachtigde:

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

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

}

Nu kunt u alle UITextFieldDelegate-methoden implementeren.

Als u een melding wilt ontvangen wanneer een gebruiker is begonnen met het bewerken van een tekstveld, kunt u de methode textFieldDidBeginEditing (_ :) als volgt implementeren:

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

Op dezelfde manier kunt u, als u een melding ontvangt als een gebruiker de interactie met een tekstveld heeft beëindigd, de methode textFieldDidEndEditing (_ :) als volgt gebruiken:

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

Als u wilt bepalen of een TextField-bewerking moet beginnen / eindigen, kunnen de methoden textFieldShouldBeginEditing (_ :) en textFieldShouldEndEditing (_ :) worden gebruikt door true / false te retourneren op basis van uw benodigde logica.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow