Implementando UITextFieldDelegate con Swift

Tengo mi class ViewController que implementa UITextFieldDelegate. No tengo autocomplete para los funcs como textFieldShouldBeginEditing. ¿Esto es un error en XCode 6? Aquí está mi implementación de class.

class ViewController: UIViewController, UITextFieldDelegate 

Xcode 6 (Beta 1) actualmente no admite autocomplete para methods / properties de protocolo no implementados (para Swift).

Su mejor opción es <CMD> - click en el protocolo que aún no está completamente implementado para ver lo que le falta.

 class ViewController: UIViewController,UITextFieldDelegate //set delegate to class @IBOutlet var txtValue: UITextField //create a textfile variable override func viewDidLoad() { super.viewDidLoad() txtValue.delegate = self //set delegate to textfile } func textFieldDidBeginEditing(textField: UITextField!) { //delegate method } func textFieldShouldEndEditing(textField: UITextField!) -> Bool { //delegate method return false } func textFieldShouldReturn(textField: UITextField!) -> Bool { //delegate method textField.resignFirstResponder() return true } 

Un poco más rápido es …

 @IBOutlet weak var nameTF: UITextField! { didSet { nameTF.delegate = self } } 
 Swift 3.0.1 // UITextField Delegates func textFieldDidBeginEditing(_ textField: UITextField) { } func textFieldDidEndEditing(_ textField: UITextField) { } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { return true; } func textFieldShouldClear(_ textField: UITextField) -> Bool { return true; } func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { return true; } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { return true; } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder(); return true; } 

// MARK: – —> Delegados de Textfield

 func textFieldDidBeginEditing(textField: UITextField) { print("TextField did begin editing method called") } func textFieldDidEndEditing(textField: UITextField) { print("TextField did end editing method called\(textField.text)") } func textFieldShouldBeginEditing(textField: UITextField) -> Bool { print("TextField should begin editing method called") return true; } func textFieldShouldClear(textField: UITextField) -> Bool { print("TextField should clear method called") return true; } func textFieldShouldEndEditing(textField: UITextField) -> Bool { print("TextField should end editing method called") return true; } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { print("While entering the characters this method gets called") return true; } func textFieldShouldReturn(textField: UITextField) -> Bool { print("TextField should return method called") textField.resignFirstResponder(); return true; } 

Al utilizar Swift versión 3.1 con las salidas de UITextFields, marque los cambios.

 import UIKit class LoginViewController: UIViewController, UITextFieldDelegate { @IBOutlet var txtUserID: UITextField! @IBOutlet var txtPwd: UITextField! override func viewDidLoad() { super.viewDidLoad() txtUserID.delegate = self txtPwd.delegate = self } // UITextField Delegates func textFieldDidBeginEditing(_ textField: UITextField) { print("TextField did begin editing method called") } func textFieldDidEndEditing(_ textField: UITextField) { print("TextField did end editing method called\(textField.text!)") } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { print("TextField should begin editing method called") return true; } func textFieldShouldClear(_ textField: UITextField) -> Bool { print("TextField should clear method called") return true; } func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { print("TextField should end editing method called") return true; } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { print("While entering the characters this method gets called") return true; } func textFieldShouldReturn(_ textField: UITextField) -> Bool { print("TextField should return method called") textField.resignFirstResponder(); return true; } } 

Encontré un poco de trabajo. Simplemente vaya al inspector de files y configure el tipo en Objective-C mientras edita el file. La terminación automática le presenta opciones Swift.

Simplemente cambie el tipo a Swift cuando compile.

Swift 3

  @IBOutlet weak var yourNameTextfield: UITextField! { didSet { yourNameTextfield.delegate = self } } extension YourNameViewController: UITextFieldDelegate { func textFieldDidBeginEditing(_ textField: UITextField) { } func textFieldDidEndEditing(_ textField: UITextField) { } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { return true } func textFieldShouldClear(_ textField: UITextField) -> Bool { return true } func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { return true } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { return true } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder(); return true } } 

En mi caso, por error, agregué los methods de delegado fuera del scope de la implementación de la class en swift y eso restringe los methods de delegado a ser llamados.

Tuve un punto y coma, por error, agregado a la statement de gestos, que era responsable de llamar a view.endEditing (true), que a su vez llama a los methods delegates, como textFieldShouldBeginEditing. Interesante rápido no muestra ningún time de compilation o errores de time de ejecución para puntos y comas agregados a veces, después de eliminar el punto y coma todo simplemente funciona bien.