Szukaj…


Wprowadzenie

Za pomocą niestandardowego pola UITextField możemy manipulować zachowaniem pola tekstowego!

Niestandardowe pole UITextField do filtrowania tekstu wejściowego

Oto przykład niestandardowego UITextField który pobiera tylko tekst numeryczny i odrzuca wszystkie pozostałe.

UWAGA: W przypadku iPhone'a można to łatwo zrobić za pomocą klawiatury numerycznej, ale w przypadku iPada nie ma tylko klawiatury z cyframi

class NumberTextField: UITextField {
    
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    registerForTextFieldNotifications()
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override func awakeFromNib() {
    super.awakeFromNib()
    keyboardType = .numberPad//useful for iPhone only
}

private func registerForTextFieldNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(NumberTextField.textDidChange), name: NSNotification.Name(rawValue: "UITextFieldTextDidChangeNotification"), object: self)
}

deinit {
    NotificationCenter.default.removeObserver(self)
}

func textDidChange() {
    text = filteredText()
}
private func filteredText() -> String {
    let inverseSet = CharacterSet(charactersIn:"0123456789").inverted
    let components = text!.components(separatedBy: inverseSet)
    return components.joined(separator: "")
}
}

Tak więc, gdziekolwiek chcemy pole tekstowe, które jako tekst wejściowy przyjmują tylko liczby, możemy użyć tego niestandardowego pola UITextField

Niestandardowe pole UITextField, aby nie zezwalać na wszystkie akcje, takie jak Kopiuj, Wklej itp

Jeśli chcemy wyłączyć wszystkie działania, takie jak Kopiuj, Wklej, Zamień, Wybierz itp. Z UITextField , możemy użyć następującego niestandardowego pola tekstowego:

class CustomTextField: UITextField {

var enableLongPressActions = false

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return enableLongPressActions
}
}

Korzystając z właściwości enableLongPressActions , w razie potrzeby możemy włączyć wszystkie akcje w dowolnym momencie.



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