Je veux faire une série de choses en réaction à la fin de certaines animations UitablesView. Par exemple, je veux que la cellule de la vue de la table soit surlignant (via SelectRowatidexpath) après avoir été défilé vers Via ScrollProwatidexpath. P>
Comment cela peut-il être fait? p>
3 Réponses :
Eh bien, si vous souhaitez effectuer une action une fois que le ScrollProwatidexPath a été tiré.
- (void)animationDidStart:(CAAnimation *)theAnimation - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
Modèle de base:
[UIView animateWithDuration:0.2 animations:^{ [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:100 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; } completion:^(BOOL finished){ //Do something after scrollToRowAtIndexPath finished, e.g.: UITableViewCell *nextCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:100 inSection:0]]; [[nextCell.contentView viewWithTag:1] becomeFirstResponder]; }];
C'est de loin la réponse la plus propre sur "Comment exécuter x après ScrollProwatidexPath est terminée?" Merci!
Je ne sais pas comment cette solution travaillait sur iOS 4/5 mais maintenant sur iOS 6.1.4 et je remarque que juste après la modification du contenu de ContourfsCette par Scrolltorowatudexpath, les cellules de cette position ne sont pas visibles, donc pour une fraction De second, la vision de la table est complètement vide, puis les cellules sont dessinées et le clavier est affiché comme prévu. Je suppose qu'un UitailView n'est pas censé être utilisé de cette manière, ou du moins pas dans cette version d'iOS. Le même résultat se produit à l'aide de SetContentOffset à la place de Scrolltorowatudexpath.
Il devine que cela ne fonctionne plus dans IOS 6, car a changé le calendrier des animations. Vérifiez la réponse suivante pour une méthode plus fiable: Stackoverflow.com/a/12516056/908621
Je me rends compte de cet ancien poste, mais j'avais un problème similaire et j'ai créé une solution qui a bien fonctionné pour moi. J'ai appliqué les techniques utilisées sur Nscookbook A > Pour créer Uialertviews avec des blocs. La raison pour laquelle je suis allé, c'était parce que je voulais utiliser les animations intégrées plutôt qu'Iview + Animatewithduration: Animations: Achèvement :. Il existe une différence plus grande entre ces animations avec la modification de iOS 7. Vous créez une catégorie pour UitailView et dans le fichier de mise en œuvre, vous créez une classe privée interne qui rappellera le bloc en l'attribuant comme délégué de la TableView. La capture est que jusqu'à ce que le bloc soit appelé, le délégué initial sera «perdu» afin de parler, car le nouveau délégué est l'objet qui appellera le bloc. C'est pourquoi j'ai mis une notification pour envoyer un message lorsque le bloc a été appelé pour réaffecter l'UribleViewelegate d'origine. Ce code a été testé et travaille sur ma fin. P> Vous pouvez ensuite appeler la méthode comme n'importe quel autre avec un bloc: p>
Merci d'avoir posté ceci. Le converti sur la vue de ma collection et fonctionne parfaitement.
Remarque rapide: Si le ScrollView est déjà en haut, le bloc d'achèvement ne déclenche pas. besoin de vérifier la position d'abord.
Cela fonctionne, mais il semble ignorer le HeightForCell's pendant / après le défilement. J'ai une cellule plus petite au bas de chaque section, mais cette méthode rend les cellules plus petites de la même taille que toutes les autres.
N'a pas fonctionné comme je pensais que ce serait. Le bloc d'achèvement n'a jamais été appelé.
@Jasperpol, que fais-tu différent? Cela a fonctionné pour moi aussi bien que d'autres qui ont commenté ici. N'oubliez pas qu'il s'agit d'une solution alternative, pas une fin à tous. Par exemple, veuillez consulter ce lien pour une autre alternative Stackoverflow.com/Questions/7623771/...
@AUGIE Vous pouvez appeler Self.contentoffset = cgPointMake (Self.contentoffset.x, Self.Contentoffset.y + 0.5); Code> Premier pour vous assurer que le blocage de la défilation est toujours appelé. (0,5 est utilisé à la place de 1 pour éviter tout problème visuel.) Mais à la fin, j'ai abandonné et passez
animé: non code> pour éviter complètement ce piratage.