iOS
Benutzerdefiniertes UITextField
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.