Soy nuevo en Swift y he estado atrapado en esto por horas. Estoy tratando de reconocer cuándo el usuario toca un UITextField y llamo a alguna función. Por alguna razón sigo recibiendo "selector no reconocido enviado a la instancia". Aquí está mi intento de una solución y Aquí está el error arrojado

Cualquier ayuda es muy apreciada!

-3
Jordan 6 ene. 2017 a las 21:37

4 respuestas

La mejor respuesta

¡Su selector no está apuntando al método! Intenta esto en su lugar:

textField.addTarget(self, action: #selector(ViewController.tapped(_:)), for: UIControlEvents.touchDown)

Además, en lugar de este enfoque, también podría establecer ViewController como delegado para textField e implementar esto:

extension ViewController: UITextFieldDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("tapped")
        textField.backgroundColor = UIColor.blue
    }
}
2
Jake 6 ene. 2017 a las 18:47

En lugar de encontrar una manera de obtener un evento de tap, puede usar la función textFieldDidBeginEditing:

class ViewController: UIViewController, UITextFieldDelegate
{
@IBOutlet weak var textField: UITextField!


override func viewDidLoad() {
    super.viewDidLoad()
    textField.delegate = self;
    // Do any additional setup after loading the view, typically from a nib.
}
 func textFieldDidBeginEditing(textField: UITextField) {
 print("TextField did begin editing method called")
 }
 func textFieldDidEndEditing(textField: UITextField) {
 print("TextField did end editing method called")
 }

}
0
Hamid Shahsavari 6 ene. 2017 a las 18:57

Uso: action: #selector(ViewController.tapped())

Además, debajo de eso, agregue esto: self.textField.delegate = self

1
Bawpotter 6 ene. 2017 a las 18:41

Simplemente puede realizar su acción en UITexFieldDelegate, haciendo

myTextField.delegate = self

Y usa el método

optional public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
//perform you action here
return true
}
1
Er. Khatri 6 ene. 2017 a las 18:47