J'aimerais faire un certain type d'actualisation d'une View Uitext pour définir TextView retour à son état d'origine. J'ai un paragraphe qui est renseigné dynamiquement en fonction de la tableViewCell que l'utilisateur clique sur. Donc, lorsqu'ils font défiler le champ de texte, revenez et sélectionnez une autre cellule et revenez, le texte change, mais la position de défilement reste lorsque l'utilisateur l'a laissé. Comment puis-je le retourner à son état par défaut? Merci! P>
7 Réponses :
Par défaut, voulez-vous faire défiler vers le haut? Si oui, vous êtes sur la bonne voie. Essayez
J'ai aussi essayé aussi, mais cela ne semblait pas aller au vrai sommet du texte. Il ne se rapproche que du sommet, mais ne ressemble pas à la valeur par défaut. Honnêtement, je n'ai pas vraiment de bien comprendre les choses Nsrange.
Je viens d'essayer cela avec une application que j'ai, et ça marche pour moi. Pouvez-vous publier une capture d'écran de votre simulateur afin que nous puissions voir le comportement?
Voici quelques screenapaps: initial, défilé manuellement et rechargé angelfilm.net/external/stackoverflow/ MOS
Pouvez-vous le faire manuellement faire défiler jusqu'au sommet avec votre doigt?
Si vous définissez un point d'arrêt pour la ligne de code dans ma réponse, est-ce que cela est frappé lorsque vous rechargez cette vue?
La solution de Jay ci-dessous a travaillé pour moi, où cette réponse n'a pas.
Même c'est la bonne réponse et travaillé pour moi, l'étrange est que le texte est parfois inférieur au sommet absolu en fonction de l'environnement de code, comme l'a mentionné @NANGELFILM Entertainment.
J'ai trouvé que si je désactive l'UitextView d'abord, puis appliquez le nouveau texte, il "défiler" automatiquement vers le haut.
Ni une de ces approches n'a travaillé de manière satisfaisante pour moi. P>
ScrollRôteVisible produit des tonnes d'artefacts visuels (beaucoup de défilement lors de la commutation entre les grandes chaînes) et ne fonctionne en fait que dans un appel différé quelque temps (j'ai utilisé 0,1 seconde) après que le contenu a été modifié, non directement comme la réponse de Shaggy Frog implique. P> Li>
Réglage du texte sur @ "" Avant de définir le nouveau contenu n'a pas aidé, même avec un retard. P> Li> ul>
Il semble que, une fois qu'une fois qu'un UitextView ait été saisi, il est toujours dans ce mode où la définition de nouveaux contenus provoque des artefacts de défilement gênants. J'ai essayé de définir la sélection du début de l'UitextView aussi, mais cela n'a pas aidé. Envoi du message ResignFirSponder avant de définir le nouveau contenu ne l'aidait pas non plus. p>
Pour cette raison, j'ai décidé de supprimer et de recréer l'UitextView à chaque fois que je change le contenu. C'est un événement assez rare (basé sur l'interaction humaine) dans mon application que ce n'est pas un problème de performance. C'était la seule façon de trouver pour "charger de nouveaux contenus" dans l'UITEXTVIEW sans tonnes d'artefacts défilants ennuyants. P>
Mon expérience est avec OS3.2 (Simulator iPad) P>
[textview setScrollEnabled:YES]; textview.text = yourText; [textview setScrollEnabled:NO];
En fait, je voulais effectivement arrêter le TextView du défilement lors de la mise à jour du contenu, alors je le faisais simplement l'inverse et cela fonctionne parfaitement. Merci.
J'ai réussi à obtenir le résultat souhaité - forçant l'UITEXTVIEW pour "faire défiler" en haut de son contenu lors de la modification des extrémités. Mais pour y parvenir, j'ai dû désactiver tous les deux défilement dans TextViewDidenseting et réinitialiser également le texte dans la même méthode.
i réactivation du défilement dans textviewdidbeginetiting. P>
- (void) textViewDidEndEditing: textView; { [textView setScrollEnabled: NO]; NSString* savedText = [textView text]; [textView setText:@""]; [textView setText: savedText]; }
Cela fonctionne si vous voulez faire défiler jusqu'au sommet:
[theTextView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
Cette solution a fonctionné pour moi. J'ai chargé du texte dans la vue ViewDidLoad, modifié le contencet de l'UITEXTVIEW puis a dû utiliser le scrollrectTOVISIBLE pour obtenir le haut pour aligner correctement. Merci
Qu'est-ce qui a finalement travaillé pour moi quoi pour effacer le contenu du texte, puis le définir avec le texte souhaité sur la boucle suivante.
// clear the text view self.textView.text = "" // set the text on the next run loop dispatch_async(dispatch_get_main_queue()) { self.textView.text = someText }
En tant que note, j'ai essayé d'utiliser [MyTextView ScrollRANGRANGANGANGANGANGANGANGANGANGÈVE: NSMAKAKERANGE ([MyTextView.Text Longueur], 0)];