fields - text field ios 11
Deshabilitando la entrada del usuario para UITextfield en swift (5)
En el guión gráfico tienes dos opciones:
- establece el ''habilitar'' del control en falso.
- configura la vista ''habilitar interacción usuario'' falso
La diferencia entre estas opciones es:
La aparición de UITextfild para mostrar en la pantalla.
- Primero se establece la habilitación del control. Puedes ver el color de fondo se cambia.
- El segundo es configurar la vista ''Habilitar interacción usuario''. El color de fondo NO se cambia.
Dentro del código:
-
textfield.enable = false
textfield.userInteractionEnabled = NO
Actualizado para Swift 3
-
textField.isEnabled = false
-
textfield.isUserInteractionEnabled = false
-
Pregunta bastante trivial, lo sé. Pero no puedo encontrar nada en línea.
Necesito deshabilitar al usuario para que no pueda editar el texto dentro de un campo de texto. De modo que al hacer clic en el texto, no aparece un teclado.
¿Algunas ideas?
Una solución programática o si es posible a través de guiones gráficos sería genial.
Me gusta hacerlo como en los viejos tiempos. Solo utiliza una clase personalizada de UITextField como esta:
//
// ReadOnlyTextField.swift
// MediFormulas
//
// Created by Oscar Rodriguez on 6/21/17.
// Copyright © 2017 Nica Code. All rights reserved.
//
import UIKit
class ReadOnlyTextField: UITextField {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
override init(frame: CGRect) {
super.init(frame: frame)
// Avoid keyboard to show up
self.inputView = UIView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Avoid keyboard to show up
self.inputView = UIView()
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
// Avoid cut and paste option show up
if (action == #selector(self.cut(_:))) {
return false
} else if (action == #selector(self.paste(_:))) {
return false
}
return super.canPerformAction(action, withSender: sender)
}
}
Otra solución, declare su controlador como UITextFieldDelegate, implemente esta devolución de llamada:
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
if textField == myTextField {
return false; //do not show keyboard nor cursor
}
return true
}
Prueba esto:
Swift 2.0 :
textField.userInteractionEnabled = false
Swift 3.0 :
textField.isUserInteractionEnabled = false
O en el guión gráfico desmarque "Interacción de usuario habilitada"
en su lugar, puede usar UILabel
si no desea que el usuario pueda modificar nada en su UITextField
Una solución programática sería usar la propiedad enabled
:
yourTextField.enabled = false
Una forma de hacerlo en un storyboard:
Desmarque la casilla de verificación Habilitado en las propiedades de su UITextField