2009-11-10 9 views
1

Je suis assez nouveau à cette chose de l'iPhone dev mais jusqu'ici j'ai construit une application assez bonne mais j'ai trébuché dans ce problème que pour la vie de moi je ne peux pas sembler résoudre.UITextview contenu se déplace vers le haut lorsque la textview est sélectionné

Fondamentalement, l'application est une application de chat pour le site social. Tout fonctionne à 100% à l'exception de la boîte de saisie qui est actuellement une UITextbox. Cela fonctionne bien mais je voudrais que la boîte se développe et soit une UITextbox multiligne avec scroll. J'ai remplacé UITextbox par un UITextview et tout va bien. J'ai l'UITextview en expansion lorsque l'utilisateur entre le texte mais j'ai un léger problème qui me rend fou.

Lorsque la fonction UITextview obtient le focus, elle déplace le curseur et tout texte vers le haut juste hors de la vue. L'UITextview Je l'ai défini pour afficher 2 lignes par défaut, puis comme la hauteur du texte va au-delà de ces deux lignes je voudrais que la boîte se développe (ce qu'elle fait) et le texte à défiler pour que vous puissiez voir ce que vous êtes dactylographie. Si vous regardez l'application SMS sur l'iPhone, c'est exactement comme cela que je voudrais que ça marche.

Tous les mots de sagesse seraient grandement appréciés.

Répondre

3

Je pense que Blaenk a parfaitement répondu (ça allait être ma réponse). Mais juste au cas où vous ne voulez pas inclure Three20 dans votre projet (c'est un peu gros), voici le code de TTTextEditor. Vous devriez pouvoir l'appeler depuis n'importe où vous développez la vue de texte.

- (void)scrollContainerToCursor:(UIScrollView*)scrollView { 
    if (_textView.hasText) { 
    if (scrollView.contentSize.height > scrollView.height) { 
     NSRange range = _textView.selectedRange; 
     if (range.location == _textView.text.length) { 
     [scrollView scrollRectToVisible:CGRectMake(0,scrollView.contentSize.height-1,1,1) 
      animated:NO]; 
     } 
    } else { 
     [scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO]; 
    } 
    } 
} 
+0

Merci Benjamin, j'ai utilisé ce que vous avez posté ci-dessus et j'ai pris ce dont j'avais besoin pour faire fonctionner ma boîte. J'ai pris un peu de violon mais à la fin j'ai réussi à le faire fonctionner comme je le voulais. – BrettS

3

Check out three20:

Three20 est une collection de classes UI iPhone, comme une visionneuse de photos et services d'utilité générale, comme un cache disque HTTP. Three20 est dérivé de l'application iPhone de Facebook, qui est l'une des applications iPhone les plus téléchargées de tous les temps.

Plus précisément, vous aurez envie de jeter un oeil à TTTextEditor:

TTTextEditor est un UITextView qui peut se développer en hauteur automatiquement pendant que vous tapez. Je l'utilise pour saisir des messages dans Facebook Chat, et il se comporte de manière similaire à l'éditeur dans l'application SMS d'Apple.

Vous trouverez des instructions sur la façon d'ajouter trois20 à votre projet here.

+0

Merci pour les pointeurs. Je peux certainement utiliser quelque chose comme ça. Le projet actuel est une phase qui sera une version de base de ce que la phase deux aura. Je ferai une réflexion sur l'utilisation du framework en phase deux de mon projet. Merci à vous deux pour votre aide. Je l'ai vraiment apprécié. – BrettS

0

J'ai fait une sous-classe de UITextView juste pour que:

https://github.com/MatejBalantic/MBAutoGrowingTextView

Il est une auto-mise en page à base de lumière poids sous-classe de UITextView qui pousse automatiquement et diminue fonction de la taille de l'entrée d'utilisateur et peut être contraint par la hauteur maximale et minimale - le tout sans une seule ligne de code.

La classe est principalement destinée à être utilisée dans le générateur d'interface et ne fonctionne qu'avec la mise en page automatique.