Mettre en œuvre UITextFieldDelegate avec Swift

j'ai ma classe ViewController qui implémente UITextFieldDelegate. Je n'ai pas d'auto complète pour les fonctions telles que textFieldShouldBeginEditing. Est-ce un bug dans XCode 6? Voici mon implémentation de la classe.

class ViewController: UIViewController, UITextFieldDelegate
18
demandé sur Beanwah 2014-06-12 00:19:24

11 réponses

Xcode 6 (Beta 1) ne supporte pas actuellement autocomplete pour les méthodes/propriétés de protocole non implémentées (pour Swift).

Votre meilleur pari est de <CMD> - click sur le protocole qui n'est pas encore entièrement mis en œuvre pour voir ce que vous manquez.

7
répondu Jiaaro 2014-06-11 20:23:31
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
}
33
répondu jayesh kavathiya 2014-09-05 13:08:10
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;
    }
18
répondu Kiran K 2016-12-02 09:59:31

Un peu plus swifty est ...

@IBOutlet weak var nameTF: UITextField! { didSet { nameTF.delegate = self } }
16
répondu DogCoffee 2015-03-26 11:55:28

lors de L'utilisation de la version 3.1 de Swift avec les sorties D'UITextFields, marquez les changements.

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;
    }
}
7
répondu Piyush Mathur 2017-06-20 13:04:57

// MARQUE:- ---> Textfield Délégués

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;
}
5
répondu Ananthu R Krishnan 2016-09-05 15:04:37

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
    }
}
3
répondu Giang 2017-05-13 03:52:05

j'ai trouvé un peu de travail. Il suffit d'aller à l'inspecteur de fichier et de mettre le type à L'Objectif-C pendant que vous éditez le fichier. L'achèvement automatique vous présente les options Swift.

commutez simplement le type de nouveau à Swift lorsque vous construisez.

2
répondu Natie Klopper 2014-06-20 17:30:25

dans mon cas par erreur j'ai ajouté les méthodes delegate en dehors de la portée de l'implémentation de classe dans swift et cela restreint les méthodes delegate à appeler.

0
répondu york 2014-11-28 08:04:11

j'ai eu un point-virgule par erreur ajouter à la déclaration de geste, qui était responsable de l'appel de vue.endEditing (true) qui, à son tour, appelle les méthodes delegate telles que textFieldShouldBeginEditing. Swift intéressant ne montre pas de temps de compilation ou d'erreurs de temps d'exécution pour les points-virgule ajoutés parfois, après avoir supprimé le point-virgule Tout fonctionne très bien.

0
répondu Max 2016-07-22 11:46:12

Swift 4:

@IBOutlet weak var yourNameTextField: UITextField! {
        didSet {
            yourNameTextField.delegate = self
        }
}


extension YourNameViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        switch textField {
        case yourNameTextField:
            yourNameTextField.resignFirstResponder()
        default:
            break
        }
        return true
    }

    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        return true
    }
}
0
répondu Giang 2018-05-15 05:46:32