Je dois montrer aux utilisateurs une "boîte" de saisie de texte multiligne d'une hauteur supérieure à la hauteur standard d'un UITextField
. Quelle devrait être la meilleure approche ou la plus correcte?
UITextField
et changer sa hauteur dans le code ou en appliquant une contrainte de hauteur.UITextView
éditable. Ceci est multi-ligne mais il n'a pas d'espace réservé par défaut, je suppose que je devrais implémenter cette fonctionnalité dans le code.UITextField
est spécifiquement une ligne seulement.
Utilisez UITextView
à la place pour le texte multiligne.
Pour implémenter l’espace réservé dans UITextView, utilisez cette logique/code.
Commencez par définir UITextView pour qu'il contienne le texte de substitution et définissez-le sur une couleur gris clair afin de reproduire l'aspect du texte de substitution de UITextField. Faites-le dans le viewDidLoad
ou lors de la création de la vue texte.
Pour Swift
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
pour Objective-C
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
Ensuite, lorsque l'utilisateur commence à modifier la vue texte, si celle-ci contient un espace réservé (c'est-à-dire si sa couleur de texte est gris clair), effacez le texte de l'espace réservé et définissez la couleur du texte sur noir afin de permettre la saisie de l'utilisateur.
Pour Swift
func textViewDidBeginEditing(textView: UITextView) {
if textView.textColor == UIColor.lightGrayColor() {
textView.text = nil
textView.textColor = UIColor.blackColor()
}
}
pour Objective-C
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
if (textView.textColor == [UIColor lightGrayColor]) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
}
return YES;
}
Ensuite, lorsque l'utilisateur a fini de modifier la vue de texte et qu'elle est résignée en tant que premier répondeur, si la vue de texte est vide, réinitialisez son espace réservé en rajoutant le texte de l'espace réservé et en définissant sa couleur en gris clair.
Pour Swift
func textViewDidEndEditing(textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
}
}
pour Objective-C
- (void)textViewDidEndEditing:(UITextView *)textView{
if ([textView.text isEqualToString:@""]) {
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
}
}
Ajoutez également UITextViewDelegate
dans le contrôleur de vue.
Allez avec l'option deux, la hauteur de textField ne peut pas être changée et la deuxième ligne n'est pas affichée ...
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()
}
}
Pour Swift
UITextView
n'a pas de manière inhérente une propriété de marque de réservation, vous devez donc en créer et en manipuler une par programme à l'aide de méthodes UITextViewDelegate
.
(Remarque: Ajoutez UITextViewDelegate
à la classe et définissez textView.delegate = self
.)
Commencez par définir le UITextView
pour qu'il contienne le texte fictif et définissez-le sur une couleur gris clair pour imiter l'aspect du texte fictif d'un UITextField
. Faites-le soit dans le viewDidLoad
ou lors de la création de la vue texte.
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
Ensuite, lorsque l'utilisateur commence à modifier la vue texte, si celle-ci contient un espace réservé (c'est-à-dire si sa couleur de texte est gris clair), effacez le texte de l'espace réservé et définissez la couleur du texte sur noir afin de permettre la saisie de l'utilisateur.
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = UIColor.black
}
}
Ensuite, lorsque l'utilisateur a fini de modifier la vue de texte et qu'elle est résignée en tant que premier répondeur, si la vue de texte est vide, réinitialisez son espace réservé en rajoutant le texte de l'espace réservé et en définissant sa couleur en gris clair.
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
}
}
J'irais certainement avec UITextView
. Si vous souhaitez définir un texte de substitution, UITextView+Placeholder
permet de le configurer facilement. Vous pouvez l'installer en utilisant
pod 'UITextView+Placeholder', '~> 1.2'
dans votre fichier pod. Maintenant, vous pouvez importer en-tête
#import <UITextView+Placeholder/UITextView+Placeholder.h>
ce qui aide à définir un espace réservé facilement.
UITextView *textView = [[UITextView alloc] init];
textView.placeholder = @"How are you?";
textView.placeholderColor = [UIColor lightGrayColor]; // optional
textView.attributedPlaceholder = ... // NSAttributedString (optional)
Vous ne pouvez pas créer de texte multiligne avec UITextField
, vous devriez aller avec UITextView
et implémenter la logique d’espace réservé.