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?:

  1. en utilisant un UITextField et changer sa hauteur en code ou en appliquant une certaine contrainte de hauteur.
  2. 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.
23
demandé sur AppsDev 2016-09-01 14:18:41

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.

53
répondu Deepraj Chowrasia 2018-08-17 15:00:42

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 .

7
répondu Mr. Xcoder 2017-05-23 12:10:41

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.

2
répondu venky 2016-09-01 11:52:28

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)
2
répondu Rains 2017-01-11 18:36:42

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
    }
}

1
répondu Naveen Kumar M 2017-06-29 16:53:46