Je développe une application où l'utilisateur doit écrire des informations. À cette fin, j'ai besoin d'un UITextField
qui est multi-ligne (en général, UITextField
c'est une seule ligne).
Comme je suis sur Google, je trouve une réponse à utiliser UITextView
au lieu de UITextfield
dans ce but.
Réponses:
UITextField
est spécifiquement une seule ligne.Votre recherche Google est correcte, vous devez utiliser
UITextView
au lieu deUITextField
pour afficher et modifier du texte multiligne.Dans Interface Builder, ajoutez un
UITextView
où vous le souhaitez et cochez la case "modifiable". Il sera multiligne par défaut.la source
Vous pouvez simuler un UITextField en utilisant UITextView. Le problème que vous aurez, c'est que vous perdez la fonctionnalité d'espace réservé.
Si vous choisissez d'utiliser un UITextView et avez besoin de l'espace réservé, procédez comme suit:
Dans votre viewDidLoad, définissez la couleur et le texte sur des espaces réservés:
Faites ensuite disparaître l'espace réservé lorsque votre UITextView est sélectionné:
Lorsque l'utilisateur a terminé la modification, assurez-vous qu'il existe une valeur. Si ce n'est pas le cas, ajoutez à nouveau l'espace réservé:
Autres fonctionnalités que vous pourriez avoir besoin de simuler:
UITextField capitalise souvent chaque lettre, vous pouvez ajouter cette fonctionnalité à UITableView:
Les UITextField ne défilent généralement pas:
la source
Ok je l'ai fait avec une astuce;) Commencez par construire un
UITextField
et augmenté c'estsize
comme ceci:Ensuite, créez un
UITextView
exactement dans la même zone que celle que vous avez crééeUITextField
, et supprimez-labackground color
. Maintenant, il semble que vous ayez plusieurs lignesTextField
!la source
UITextView
. Le point d'avoir un UITextField est qu'il se comporte différemment d'unUITextView
.UITextView
etUITextfield
: ils héritent deUIScrollView
vsUIControl
, non modifiables par défaut vs modifiables par défaut, multilignes vs unifilaires, différents protocoles de délégué, sans espace réservé vs espace réservé.UITextView
est pour les paragraphes de texte. Utilisez-le si vous avez besoin d'un paragraphe de texte, et non autrement.Outre le comportement sur plusieurs lignes, la principale différence entre UITextView et UITextField est que UITextView ne propose pas d'espace réservé. Pour contourner cette limitation, vous pouvez utiliser un UITextView avec un «faux espace réservé».
Voir cette question SO pour plus de détails: espace réservé dans UITextView .
la source
Si vous devez avoir un UITextField avec 2 lignes de texte, une option consiste à ajouter un UILabel en tant que sous-vue de l'UITextField pour la deuxième ligne de texte. J'ai un UITextField dans mon application que les utilisateurs ne réalisent souvent pas est modifiable en appuyant sur, et je voulais ajouter un petit texte de sous-titre qui dit "Appuyez pour modifier" à l'UITextField.
la source
Oui, une UITextView est ce que vous recherchez. Vous devrez gérer certaines choses différemment (comme la touche retour), mais vous pouvez y ajouter du texte et cela vous permettra de faire défiler vers le haut et vers le bas s'il y a trop de texte à l'intérieur.
Ce lien contient des informations sur la création d'un écran pour saisir des données:
créer un écran de saisie de données
la source
utiliser UITextView au lieu de UITextField
la source
Un complément à la réponse de h4xxr dans ce qui précède, un moyen plus facile d'ajuster la hauteur de l'UITextField est de sélectionner le style de bordure carrée dans les inspecteurs d'attributs-> Champ de texte. (Par défaut, le style de bordure d'un champ UITextfield est l'ellipse.)
Référence: Répondit Brian ici: Comment définir la hauteur UITextField?
la source
Il y a une autre option qui a fonctionné pour moi:
Sous-classe UITextField et écraser:
Dans cette méthode, vous pouvez par exemple:
Ce code rendra le texte en utilisant autant de lignes que nécessaire si le rect a suffisamment d'espace. Vous pouvez spécifier tout autre attribut en fonction de vos besoins.
Ne pas utiliser:
ce qui forcera le rendu du texte sur une ligne
la source