web-dev-qa-db-fra.com

Swift: devenir premier intervenant sur UITextField ne fonctionne pas?

J'ai créé un UIViewController personnalisé avec un UITextField sur Storyboard. Sur viewDidLoad, j'ai défini UITextFIeld sur becomeFirstResponder, il ne s'est rien passé (aucun clavier n'a surgi).

J'ai ensuite essayé d'appeler resignFirstResponder(), mais cela a renvoyé false. Ensuite, j'ai essayé de trouver qui le first responder consiste à boucler toutes les sous-vues en utilisant le code via @ Obtenez le premier répondeur actuel sans utiliser d'API privée . Il s'avère qu'aucune des vues secondaires n'est le premier répondant.

Mon ViewController dans le storyboard

enter image description here

Mon code

class BLTestViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        tf.becomeFirstResponder()
        // Do any additional setup after loading the view.
    }
}

Aussi simple que possible ... POURQUOI LE CLAVIER N'EST PAS EN COURS !!! Une chose que j'ai sur la mise en page automatique, mais je ne sais pas si cela affecte le pop-up du clavier.

12
blee908

Je viens de le tester avec un champ de texte en appelant la fonction self.tf.becomeFirstResponder() indside viewDidLoad() et son fonctionnement est absolument parfait. Vous devrez basculer votre clavier en appuyant sur commande + K comme nflacco vient de le signaler et désactiver le clavier matériel dans le simulateur comme:

  1. simulateur iOS -> Matériel -> Clavier
  2. Décochez "Connecter le clavier matériel"
19
4aRk Kn1gh7

Swift 4 cela a fonctionné pour moi
l'essayer

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.main.async {
        self.textView.becomeFirstResponder()
    }

}
10

Je pense

class BLTestViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        self.focustf()
        // Do any additional setup after loading the view.
    }

    func focustf(){
    self.tf.becomeFirstResponder()
    }
}
5
Hoàng Kiên

Swift 4 et iOS 11

Dans mon cas, peu importe ce que j'ai essayé, je n'ai pas pu définir le premier répondeur avant d'avoir essayé.

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isKind(of: YOURTABLEVIEWCELL.self) {
        if let yourCell = cell as? YOURTABLEVIEWCELL{
            yourCell.yourUiTextField.becomeFirstResponder()
        }
    }
}

J'espère que cela aidera quelqu'un coincé avec le même problème.

3
Derek Hierhohlzer

appuyez sur commande + shift + k pour ouvrir le clavier.

0
Talha Ahmed