iOS
Aangepast UITextField
Zoeken…
Invoering
Met behulp van aangepaste UITextField kunnen we het gedrag van het tekstveld manipuleren!
Aangepast UITextField voor het filteren van invoertekst
Hier is een voorbeeld van een aangepast UITextField
dat alleen numerieke tekst gebruikt en alle andere weggooit.
OPMERKING: voor de iPhone is het eenvoudig om dit te doen met het toetsenbordtype Nummer, maar voor iPad is er geen toetsenbord met alleen nummers
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: "")
}
}
Dus, waar we ook een tekstveld willen dat alleen getallen als invoertekst zou gebruiken, dan kunnen we dit aangepaste UITextField gebruiken
Aangepast UITextField om alle acties zoals kopiëren, plakken, enz. Te verbieden
Als we alle acties zoals kopiëren, plakken, vervangen, selecteren, enz. Van UITextField
willen uitschakelen, kunnen we het volgende aangepaste tekstveld gebruiken:
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
}
}
Met de eigenschap enableLongPressActions
kunnen we alle acties op elk gewenst moment later inschakelen, indien nodig.