devenirPremierRépondant :faites défiler automatiquement jusqu'à l'UIControl qui devient le premier intervenant

StackOverflow https://stackoverflow.com/questions/5042895

Question

j'ai un groupe UITableViewController avec une section et plusieurs lignes.Chaque cell se compose de deux éléments :un UILabel avec une description et un UITextField pour une entrée.Une forme, je dirais.

En bas se trouve un bouton "Suivant" pour passer à la vue suivante.Mais avant cela, je valide le UITextField:si l'utilisateur n'a pas rempli de champ, ce champ doit avoir le focus, afin que l'utilisateur voie qu'il doit saisir quelque chose.J'ai essayé avec ça :

[inputField becomeFirstResponder];

Rappelez-vous, le bouton sur lequel j'ai appuyé est en bas de mon point de vue et imaginez que le UITextField est au sommet.Dans cette situation, le champ n'est pas mis au point car il est trop éloigné.Maintenant, lorsque je fais défiler lentement vers le haut et que le champ devient visible, le champ devient le premier intervenant et obtient le curseur :-) Conclusion :Le becomeFirstResponder a fonctionné, mais ne fait pas exactement ce que je voulais.Je ne veux pas faire défiler vers le haut avec mon doigt, le champ doit être mis au point et visible automatiquement.

Existe-t-il un moyen de « passer » directement à mon domaine ?Utiliser une alternative à becomeFirstResponder?Faire défiler automatiquement jusqu'à mon champ ?

Merci pour votre aide!

Était-ce utile?

La solution

Si vous connaissez l'index de la cellule avec le UITextField que vous souhaitez modifier, utilisez



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]

avant d'appeler becomeFirstResponder.

Si la cellule n'est pas affichée à l'écran, devenirFirstResponder peut échouer pour certaines versions d'iOS.De plus, certaines versions effectueront un défilement supplémentaire sur la tableview dans certaines situations (par ex.si le code d'Apple détermine que le répondeur serait toujours hors de l'écran sans plus de défilement).Pour contourner ces problèmes, vous devrez peut-être appeler le premier intervenant une fois l'animation de défilement terminée.

Autres conseils

J'aurais le même problème. cela est dû au fait que l'UIAnimation se produit simultanément pour les deux tâches.Ainsi, alors que l'UIAnimation pour scrollToRowAtIndexPath ignore le comeFirstResponder .

La solution pourrait être désactivez l'effet d'animation OU sinon en utilisant le performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top