2009-11-27 4 views
2

Lorsque vous écrivez dans un UITextAffichez plus de texte que vous ne pouvez y insérer entièrement, le texte défile vers le haut et le curseur se place souvent une ou deux lignes au-dessus de la ligne inférieure de la vue. C'est un peu frustrant car je veux que mon application utilise correctement toute la hauteur de la vue texte.UITextView autoscroll à la dernière ligne

Fondamentalement ce que je veux est de configurer l'UITextView pour écrire à sa partie la plus basse et ne pas l'utiliser juste pour le défilement. J'ai vu des questions similaires here, here et here. Cependant, je n'ai pas encore vu une bonne solution.

Merci

Répondre

8

J'ai une implémentation légèrement différente (je veux désactiver le défilement), mais j'ai aussi dû arrêter le curseur de sauter de mon UITextView. Pour ce faire, j'ai implémenté un null scrollRectToVisible dans ma sous-classe UITextView. Comme ceci:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 
{ 
// do nothing. This fixes the cursor jumping above the field defect. 
} 
+0

C'est un bon indice. Je peux probablement ré-implémenter cette méthode pour faire défiler l'affichage de texte exactement comme j'en ai besoin. –

0

si je comprends bien, vous pouvez utiliser

[textView setScrollEnabled:NO]; 

pour désactiver le défilement. Qu'en est-il de ne pas taper lorsque le curseur atteint la marge inférieure ... peut-être ce n'est pas une bonne solution, mais vous pouvez ajouter une valeur de seuil (caractères maximum dans la [textView text]) et retour NO dans

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

Déléguez la méthode de UITextView si [[textView text] length] > maxCharacters.

+0

Peut-être que je n'étais pas clair. Je veux toujours que la vue soit défilable. Mais je veux aussi pouvoir écrire du texte sur toute sa hauteur. C'est quelque chose qui n'est généralement pas possible par défaut puisque le texte commencera à rebondir quand vous frapperez la dernière mais la moins grande ligne (et je peux dire que UITextView s'étend en dessous de cette ligne en faisant défiler le texte vers le bas). –

0

je trouve la propriété semble 'contentOffset' peut également être utilisé ...

2

excellente solution est dans la sous-classe UITextView ajouter des lignes

-(void) setContentOffset:(CGPoint)contentOffset { 
    [self setContentInset:UIEdgeInsetsZero]; 
    [super setContentOffset:contentOffset]; 
} 

C'est un travail!

+0

Ça marche!Merci Zeine. – Seunghoon

0

utilisent ce

NSRange myRange=NSMakeRange(outPutTextView.text.length, 0); 

[outPutTextView scrollRangeToVisible:myRange]; 
0

J'ai la dernière ligne par setFrame:

  1. Vous pouvez setFrame à environ une hauteur de ligne
  2. Lorsque vous modifiez, en - (BOOL) textView:shouldChangeTextInRange:replacementText:, utilisez scrollRangeToVisible:, l'argument est selectedRange
  3. Lorsque vous terminez l'édition, setframe à la taille d'origine
Questions connexes