Szukaj…


UITextField - Ogranicz pole tekstowe do niektórych znaków

Jeśli chcesz przeprowadzić weryfikację pola tekstowego przez użytkownika, użyj następującego fragmentu kodu:

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

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

Ponadto do sprawdzania poprawności możesz używać zestawów znaków dostarczonych przez firmę Apple:

Spójrz na https://developer.apple.com/reference/foundation/nscharacterset

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

Znajdź następny tag i zarządzaj klawiaturą

Pole tekstowe wywołuje różne metody delegowania (tylko jeśli ustawione są delegaty) Jedną z metod wywoływanych przez textfield jest * - (BOOL) textFieldShouldReturn: (UITextField ) textField

Ta metoda jest wywoływana za każdym razem, gdy użytkownik naciśnie przycisk powrotu. Za pomocą tej metody możemy zaimplementować dowolne niestandardowe zachowanie.

Na przykład,

W poniższym przykładzie kolejny respondent będzie znajdował się na podstawie tagu i zarządzał klawiaturą. Tutaj 20 jest stałą, ponieważ znacznik przypisany do pola tekstowego jest taki 50,70,90 itd.

Tutaj, po znalezieniu nowego obiektu pola tekstowego jako odpowiadającego, zmieni bieżące pole tekstowe jako nowego odpowiadającego i odpowiednio otworzy klawiaturę.

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

Działania, gdy użytkownik rozpoczął / zakończył interakcję z polem tekstowym

W przypadku Swift 3.1:

W pierwszym przykładzie widać, jak przechwyciłbyś użytkownika wchodzącego w interakcje z polem tekstowym podczas pisania. Podobnie istnieją metody w UITextFieldDelegate, które są wywoływane, gdy użytkownik rozpoczął i zakończył swoją interakcję z TextField.

Aby uzyskać dostęp do tych metod, musisz być zgodny z protokołem UITextFieldDelegate i dla każdego pola tekstowego , o którym chcesz otrzymywać powiadomienia, przypisz klasę nadrzędną jako delegata:

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

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

}

Teraz będziesz mógł zaimplementować wszystkie metody UITextFieldDelegate.

Aby otrzymywać powiadomienia, gdy użytkownik rozpoczął edycję pola tekstowego , możesz zaimplementować metodę textFieldDidBeginEditing (_ :) w następujący sposób:

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

Podobnie, będąc powiadamianym, jeśli użytkownik zakończył interakcję z polem tekstowym , możesz użyć metody textFieldDidEndEditing (_ :) w następujący sposób:

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

Jeśli chcesz mieć kontrolę nad tym, czy TextField powinien rozpocząć / zakończyć edycję, metody textFieldShouldBeginEditing (_ :) i textFieldShouldEndEditing (_ :) mogą być używane przez zwracanie wartości true / false zgodnie z potrzebną logiką.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow