84 votes

Limiter le nombre de lignes pour UITextview

Je me demandais comment limiter le nombre de LIGNES (et non de caractères comme demandé dans d'autres questions) qu'un utilisateur peut saisir lors de l'édition d'un UITextField.

Idéalement, je voudrais limiter l'entrée à max. 10 lignes.

Par où devrais-je commencer ? Est-ce que je fais ça avec une méthode ? Dans

  - (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView

264voto

Jamagas Points 2449

La réponse de Maciek Czarnik n'a pas fonctionné pour moi, mais elle m'a permis de savoir quoi faire.

iOS 7+

Rapide

 textView.textContainer.maximumNumberOfLines = 10
textView.textContainer.lineBreakMode = .byTruncatingTail

ObjC

 textView.textContainer.maximumNumberOfLines = 10;
textView.textContainer.lineBreakMode = NSLineBreakByTruncatingTail;

59voto

Maciek Czarnik Points 445

Peut-être que cela peut aider (iOS 7+) :

 textView.textContainer.maximumNumberOfLines = 10;
[textView.layoutManager textContainerChangedGeometry:textView.textContainer];

Même la première ligne devrait faire l'affaire, je suppose, mais ce n'est pas le cas... C'est peut-être un bug du SDK

15voto

Anomie Points 43759

Vous avez la bonne idée, mais la mauvaise méthode. textView:shouldChangeTextInRange:replacementText: est appelé chaque fois que le texte va changer ; vous pouvez accéder au contenu actuel de la vue de texte à l'aide de sa text , et vous pouvez construire le nouveau contenu à partir de la plage passée et du texte de remplacement avec [textView.text stringByReplacingCharactersInRange:range withString:replacementText] . Vous pouvez alors compter le nombre de lignes et retourner OUI pour autoriser la modification ou NON pour la rejeter.

14voto

levin varghese Points 231

en version Swift 3.0 :

 self.textView.textContainer.maximumNumberOfLines = self.textViewNumberOflines
self.textView.textContainer.lineBreakMode = .byTruncatingTail

12voto

Numereyes Points 76

La réponse de Maciek Czarnik ne semble pas fonctionner pour moi, même sous iOS7. Cela me donne un comportement étrange, je ne sais pas pourquoi.

Ce que je fais pour limiter le nombre de lignes dans UITextView est simplement :

(testé uniquement sous iOS7) Dans la méthode UITextViewDelegate suivante :

 - (void)textViewDidChange:(UITextView *)textView
{
    NSUInteger maxNumberOfLines = 5;
    NSUInteger numLines = textView.contentSize.height/textView.font.lineHeight;
    if (numLines > maxNumberOfLines)
    {
        textView.text = [textView.text substringToIndex:textView.text.length - 1];
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X