Recherche…


Introduction

En utilisant UITextField personnalisé, nous pouvons manipuler le comportement du champ de texte!

UITextField personnalisé pour le filtrage du texte d'entrée

Voici un exemple de UITextField personnalisé qui ne prend que du texte et rejette tous les autres.

REMARQUE: pour l’iPhone, il est facile de le faire en utilisant le clavier numérique, mais pour l’iPad, il n’existe pas de clavier avec Nombres uniquement.

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

Donc, partout où nous voulons un champ de texte qui ne prendrait que des nombres comme texte d’entrée, alors nous pouvons utiliser cet objet UITextField personnalisé.

UITextField personnalisé pour interdire toutes les actions telles que copier, coller, etc.

Si nous voulons désactiver toutes les actions comme Copier, Coller, Remplacer, Sélectionner, etc. à partir de UITextField nous pouvons utiliser les champs de texte personnalisés suivants:

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

En enableLongPressActions propriété enableLongPressActions , nous pouvons activer toutes les actions à tout moment ultérieurement, si nécessaire.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow