iOS
UITextField personnalisé
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.