iOS
UITextField personalizado
Buscar..
Introducción
Con el uso de UITextField personalizado, podemos manipular el comportamiento del campo de texto.
UITextField personalizado para filtrar el texto de entrada
Aquí hay un ejemplo de UITextField
personalizado que toma solo texto numérico y descarta todos los demás.
NOTA: Para iPhone, es fácil hacerlo usando el teclado de tipo Número, pero para iPad no hay un teclado con números solamente
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: "")
}
}
Entonces, donde sea que queramos un campo de texto que tome solo números como texto de entrada, entonces podemos usar este campo de campo personalizado.
Personalizar campo de campo para no permitir todas las acciones como copiar, pegar, etc.
Si queremos deshabilitar todas las acciones como Copiar, Pegar, Reemplazar, Seleccionar, etc. desde UITextField
, podemos usar el siguiente campo de texto personalizado:
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
}
}
Usando la propiedad enableLongPressActions
, podemos habilitar todas las acciones en cualquier momento posterior, si es necesario.