Entrée utilisateur multi-ligne dans iOS: UITextField vs UITextView
j'ai besoin de montrer aux utilisateurs un texte multi-ligne d'entrée "box" avec une hauteur supérieure à la hauteur standard d'un UITextField
. Quelle devrait être l'approche la meilleure ou la plus correcte?:
- en utilisant un
UITextField
et changer sa hauteur en code ou en appliquant une certaine contrainte de hauteur. - utilisant un modifiable
UITextView
. C'est multi-ligne mais il n'y a pas de placeholder par défaut, je suppose que je devrais implémenter cette fonctionnalité dans le code.
5 réponses
UITextField
est précisément une ligne seulement.
utiliser UITextView
à la place pour le texte multiligne.
pour implémenter le paramètre dans UITextView utilisez cette logique/code.
commence par définir UITextView pour contenir le texte placé et le met dans une couleur Gris clair pour imiter l'apparence du texte placé d'UITextField. Soit le faire dans le viewDidLoad
ou sur la création de la vue de texte.
Pour Swift
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
Pour Objectif-C
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
puis, lorsque l'utilisateur commence à modifier la vue texte, si la vue texte contient un placeholder (c.-à-d. SI sa couleur de texte est gris clair) effacer le texte placeholder et de définir la couleur du texte à noir afin de tenir compte de l'entrée de l'utilisateur.
Pour Swift
func textViewDidBeginEditing(textView: UITextView) {
if textView.textColor == UIColor.lightGrayColor() {
textView.text = nil
textView.textColor = UIColor.blackColor()
}
}
Pour Objectif-C
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
if (textView.textColor == [UIColor lightGrayColor]) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
}
return YES;
}
puis quand l'Utilisateur termine l'édition de la vue de texte et il est résigné en tant que premier répondant, si la vue de texte est vide, réinitialiser son placeholder en ré-ajoutant le texte placeholder et en mettant sa couleur au gris clair.
Pour Swift
func textViewDidEndEditing(textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
}
}
Pour Objectif-C
- (void)textViewDidEndEditing:(UITextView *)textView{
if ([textView.text isEqualToString:@""]) {
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
}
}
ajoute aussi UITextViewDelegate
dans le contrôleur de vue.
va avec l'option deux, la hauteur du champ text ne peut pas être changée et il n'affiche pas la deuxième ligne...
LOGIQUE DES ESPACES RÉSERVÉS:
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
func textViewDidBeginEditing(textView: UITextView) {
if textView.textColor == UIColor.lightGrayColor() {
textView.text = nil
textView.textColor = UIColor.blackColor()
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
}
}
À Partir De L'Affichage Du Texte De L'Espace Réservé Swift .
vous ne pouvez pas faire de texte multiligne en utilisant UITextField
, vous devez aller avec UITextView
et mettre en œuvre la logique des espaces réservés.
je dirais certainement UITextView
. Dans le cas où vous voulez définir le texte du placeholder, UITextView+Placeholder
permet de le définir facilement. Vous pouvez l'installer en utilisant
pod 'UITextView+Placeholder', '~> 1.2'
dans votre fichier pod. Maintenant, vous pouvez importer l'en-tête
#import <UITextView+Placeholder/UITextView+Placeholder.h>
qui aide à régler facilement le paramètre placeholder.
UITextView *textView = [[UITextView alloc] init];
textView.placeholder = @"How are you?";
textView.placeholderColor = [UIColor lightGrayColor]; // optional
textView.attributedPlaceholder = ... // NSAttributedString (optional)
Pour Swift 3
UITextView
n'a pas en soi une propriété de placeholder donc vous devez créer et manipuler une programmatically en utilisant UITextViewDelegate
méthodes.
(Note: ajouter UITextViewDelegate
à la classe et régler textView.delegate = self
.)
a d'abord placé le UITextView
pour contenir le texte du placeholder et l'a placé à une couleur grise claire pour imiter l'apparence d'un UITextField
l 'placeholder texte. Faites-le dans le viewDidLoad
ou sur la création de la vue texte.
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
puis, lorsque l'utilisateur commence à modifier la vue texte, si la vue texte contient un placeholder (c.-à-d. SI sa couleur de texte est gris clair) effacer le texte placeholder et de définir la couleur du texte à noir afin de tenir compte de l'entrée de l'utilisateur.
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = UIColor.black
}
}
puis quand l'Utilisateur termine l'édition de la vue de texte et il est résigné en tant que premier répondant, si le texte la vue est vide, réinitialisez son placeholder en ré-ajoutant le texte du placeholder et en définissant sa couleur au gris clair.
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
}
}