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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow