Suche…


Einführung

Mit benutzerdefiniertem UITextField können wir das Verhalten von Textfeldern beeinflussen!

Benutzerdefiniertes UITextField zum Filtern von Eingabetext

Hier ist ein Beispiel eines benutzerdefinierten UITextField , das nur numerischen Text übernimmt und alle anderen verwirft.

HINWEIS: Für das iPhone ist dies mit der Zifferntastatur problemlos möglich, für das iPad gibt es jedoch keine Tastatur nur mit Zahlen

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: "")
}
}

Wo immer wir Textfelder wünschen, die nur Zahlen als Eingabetext verwenden, können wir dieses benutzerdefinierte UITextField verwenden

Benutzerdefiniertes UITextField zum Deaktivieren aller Aktionen wie Kopieren, Einfügen usw

Wenn Sie alle Aktionen wie Kopieren, Einfügen, Ersetzen, Auswählen usw. von UITextField deaktivieren möchten, können wir das folgende benutzerdefinierte Textfeld verwenden:

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

Mit der Eigenschaft enableLongPressActions können wir später bei Bedarf alle Aktionen aktivieren.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow