web-dev-qa-db-fra.com

Comment créer un UITextfield multiligne?

Je développe une application où l'utilisateur doit écrire des informations. Pour cela, j'ai besoin d'une UITextField multi-ligne (en général, UITextField correspond à une seule ligne).

Lorsque je suis sur Google, je trouve une solution consistant à utiliser UITextView au lieu de UITextfield à cette fin.

247
raaz

UITextField est spécifiquement d'une ligne uniquement.

Votre recherche Google est correcte, vous devez utiliser UITextView au lieu de UITextField pour l'affichage et la modification de texte multiligne.

Dans Interface Builder, ajoutez un UITextView à l'endroit souhaité et cochez la case "modifiable". Ce sera multiligne par défaut.

416
h4xxr

Ok je l'ai fait avec une astuce;) D'abord, construisez une UITextField et augmentez c'est size comme ceci:

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;

Construisez ensuite un UITextView exactement dans la même zone que celle que vous avez utilisée pour créer votre UITextField et supprimez son background color. Maintenant, il semble que vous ayez plusieurs lignes TextField!

19
Rudi

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 une UITextView et que vous avez besoin d'un espace réservé, procédez comme suit:

Dans votre viewDidLoad, définissez la couleur et le texte sur des espaces réservés:

myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."

Ensuite, effacez l’espace réservé lorsque votre UITextView est sélectionné:

func textViewDidBeginEditing (textView: UITextView) {
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
        myTxtView.text = nil
        myTxtView.textColor = .white
    }
}

Lorsque l'utilisateur a terminé sa modification, assurez-vous qu'il existe une valeur. Si ce n'est pas le cas, ajoutez à nouveau le paramètre fictif:

func textViewDidEndEditing (textView: UITextView) {
    if myTxtView.text.isEmpty || myTxtView.text == "" {
        myTxtView.textColor = .lightGray
        myTxtView.text = "Type your thoughts here..."
    }
}

Autres fonctionnalités dont vous pourriez avoir besoin pour simuler:

UITextField met souvent chaque lettre en majuscule, vous pouvez ajouter cette fonctionnalité à UITableView:

myTxtView.autocapitalizationType = .words

UITextField ne défile généralement pas:

myTxtView.scrollEnabled = false
14
Dave G

Outre le comportement sur plusieurs lignes, la différence principale entre UITextView et UITextField est que UITextView ne propose pas d'espace réservé. Pour contourner cette limitation, vous pouvez utiliser une UITextView avec un "faux espace réservé".

Voir cette SO question pour plus de détails: Placeholder in UITextView .

7
MonsieurDart

Si vous devez avoir un objet UITextField avec 2 lignes de texte, vous pouvez ajouter un UILabel en tant que sous-vue de l'élément UITextField pour la deuxième ligne de texte. J'ai un UITextField dans mon application que les utilisateurs ne réalisent pas souvent qu'il est modifiable en tapotant et je voulais ajouter un petit texte de sous-titre qui dit "Tap to Edit" à UITextField.

CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";

[textField addSubview:tapEditLbl];
2
DiscDev

Oui, UITextView est ce que vous cherchez. Vous aurez à traiter certaines choses différemment (comme la touche de retour), mais vous pouvez y ajouter du texte, ce qui vous permettra de faire défiler 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

2
nevan king

utiliser UITextView au lieu de UITextField

0
Monir Khlaf

Un complément à la réponse de h4xxr dans ce qui précède, un moyen plus facile d'ajuster la hauteur de UITextField consiste à sélectionner un style de bordure carrée dans les inspecteurs d'attributs-> Champ de texte. (Par défaut, le style de bordure d'un UITextfield est ellipse.)

Référence: Brian a répondu ici: Comment définir la hauteur UITextField?

0
Tony