Je souhaite supprimer la fonction "retour" du clavier pendant la frappe. Il n'y a donc pas de nouvelle ligne. Par conséquent, j'aimerais que la touche "retour" fonctionne comme "Terminé" afin de masquer le clavier. .
J'utilise une UITextView, qui est modifiable, afin que l'utilisateur puisse taper son message et le poster sur la timeline principale, mais comme j'ai des cellules fixes, je ne veux pas que l'utilisateur puisse appuyer sur "retour" et leur poste serait hors de portée de la chronologie.
J'ai trouvé ceci qui fonctionne avec UITextField, mais pas avec UITextView:
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder() //if desired
return true
}
Je voulais donc simplement savoir s’il existe un moyen de le faire dans une vue UITextView, ou au moins de pouvoir cacher le clavier si vous appuyez sur la touche Entrée, au lieu de créer une nouvelle ligne.
Vous pouvez définir le type de clé de retour du champ de texte:
textField.returnKeyType = UIReturnKeyType.Done
Update Vous pouvez certainement utiliser la même approche pour définir la clé de retour sur "Terminé", comme indiqué ci-dessus. Cependant, UITextView ne fournit pas de rappel lorsque l'utilisateur appuie sur la touche de retour. En guise de solution de contournement, vous pouvez essayer de gérer l'appel textView textView (textView: UITextView, shouldChangeTextInRange: NSRange, textTextText: String) et de fermer le clavier lorsque vous détectez la saisie d'un nouveau caractère de ligne:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
textView.resignFirstResponder()
}
return true
}
J'ai essayé de nombreux codes et cela a finalement fonctionné pour moi dans Swift 3.0 Dernier [mars 2017] grâce à UITextFields
La classe "ViewController" doit être héritée du "UITextFieldDelegate" pour que ce code fonctionne.
class ViewController: UIViewController,UITextFieldDelegate
Ajoutez le champ de texte avec le numéro de balise approprié. Ce numéro de balise est utilisé pour amener le contrôle au champ de texte approprié en fonction du numéro de balise incrémentiel qui lui est attribué.
override func viewDidLoad() {
userNameTextField.delegate = self
userNameTextField.tag = 0
userNameTextField.returnKeyType = .next
passwordTextField.delegate = self
passwordTextField.tag = 1
passwordTextField.returnKeyType = .go
}
Dans le code ci-dessus, le code "returnKeyType = UIReturnKeyType.next" où la touche de retour du clavier à afficher en tant que "Suivant" contient également d'autres options telles que "Rejoindre/Aller", etc.
Ce "textFieldShouldReturn" est une méthode contrôlée par UITextFieldDelegate et nous avons ici la sélection de champ suivante basée sur l'incrémentation de la valeur de Tag.
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
return true;
}
return false
}
Travailler chez Swift 4
Ajoutez ceci à viewDidLoad ().
textField.returnKeyType = UIReturnKeyType.Done
Ajoutez ceci n'importe où vous aimez.
extension UITextView: UITextViewDelegate {
public func textViewDidChange(_ textView: UITextView) {
if text.last == "\n" { //Check if last char is newline
text.removeLast() //Remove newline
textView.resignFirstResponder() //Dismiss keyboard
}
}
}