Pb avec le Keyboard Type

Bonjour les programmeurs.

Je suis à ce chapitre : https://www.purplegiraffe.fr/courses/231263/lectures/3600518

Première question :
J’ai un petit soucis avec le Keyboard Type depuis un UITextField.
Lors ce que je sélectionne le type Decimal Pad, il s’affiche bien dans le Simulator avec un . pour les décimal. Par contre sur mon tel j’ai une virgule à la place du .
J’ai cherché dans les paramètres mais je n’ai pas trouvé.
Comment fait-on ?

Deuxième question :
Je voudrais faire disparaitre le clavier quand j’ai fini de tapper une valeur car je voudrais avoir accès à d’autres chose qui se trouvent dessous.

Bonjour Obiwan,
J’utilise moi aussi un clavier decimal et j’ai moi aussi le “.”, donc sur ce point je ne pourrais pas t’aider.
Pour faire disparaitre mon clavier, j’utilise “resignFirstResponder()”, que j’ai intégré dans une fonction de type action (@IBAction)…
Pour ton cas, ce serait une fonction qui détecte la fin de la saisie, ou (je ne sais pas si en Swift ça existe) lorsque ton texfield perd le focus…
Bon courage :wink:

Bonsoir Obiwan,

pour ta 1ère Question:
(juste une hypothèse, sur mes propres souvenirs, (pas le moyen de vérifier actuellement):
Il me semble que le séparateur décimal dépend de la langue de l’appareil utilisé.
Donc sur ton iPhone ou iPad, tu dois être en Français, avec une virgule comme séparateur.
et par contre le Simulateur est (par défaut ? toujours ?) en Anglais, donc avec un point comme séparateur.

1 « J'aime »

Pour faire disparaître le clavier, il faut tout d’abord que ton ViewController adhère au protocole UITextFieldDelegate, ce que tu déclares, puis que tu implémentes dans le viewDidload(), en déclarant que self sera le délégateur du UITextField que tu vas éditer.
Ensuite, il existe différents moyens de gérer le clavier ; je te propose celui-ci :
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == mon_textField{
self.mon_textField.endEditing(true)
}}
qui sera utilisé sans que tu aies besoin de t’en soucier davantage au moment voulu.

La complétion automatique joue des tours : je voulais écrire delegate, et non pas délégateur qui ne veut rien dire.

merci à tous c’est intéressant. je vais investiguer.
Par contre pour le moment, je ne peux pas me servir de mon appli sur mon iphone à cause des virgules, c’est quand même super chiant de ne pas pouvoir changer sois-même la , en . dans les décimal.

salut fjacquemin.
merci pour ton retour mais il ne ne passe rien de plus.

J’ai ajouté : UITextFliedDelegate dans la “class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {…”

J’ai bien ajouté un “return true” entre les deux dernier } car la fonction attend un Bool.
Voici mon code :

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == ui_inputValueField{
self.ui_inputValueField.endEditing(true)
}
return true
}

Je ne vois pas ou je dois ajouter la fonction textFieldShouldReturn. Dans le viewDidLoad ? Mais comment ?

Tu as eu raison d’ajouter le return. Tu ne place pas cette fonction dans le viewDidload, mais dans la déclaration de ta classe ViewController. C’est en revanche dans le viewDidload que tu indiques textile.delegate = self

Je comprends pas, désolé.
J’ai bien déclaré UITextFieldDelegate dans l’entête de ma class :
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate

Dessous j’ai un textField : @IBOutlet weak var ui_inputValueField: UITextField!

Ensuite dans le view didload j’ai ça :
override func viewDidLoad() {
// textile.delegate = self
ui_inputValueField.delegate = self
ui_ConversionPickerView.delegate = self
ui_ConversionPickerView.dataSource = self
super.viewDidLoad()
initValue()
}

Je dois oublier quelque chose parce que ça marche toujours pas.
Une idée ?

Après quelques vidéos complémentaires (protocoles et délégations - merci Maxime), il ne faut pas mettre return true mais return false et puis on peut utiliser le Keyboard Type Numbers and Punctuation.
Mais bon ça me plait pas encore. C’est pas top.

J’étais justement en train de rechercher le lien à te donner vers la vidéo en question :

Mais apparemment tu as trouvé entre temps :slight_smile:

C’est vrai, return false sinon le clavier croit qu’il est autorisé à interpréter la frappe de la touche de retour comme un retour chariot. Mais en fait, le endEditing court-circuite tout ça. “textile delegate” c’est un des effets pervers de la complétion automatique dans Safari, qui essaie aussi de m’imposer “délégateurs” pour delegate. On n’est jamais assez vigilant avec la bêtise artificielle, qui passe son temps à monter des synergie avec la sienne propre.