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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow