TableView comme un picker
Bonjour,
J'essaye de créer un picker. J'ai une tableView avec des éléments. Je voudrais que lorsque l'utilisateur sélectionné une Cell, cette Cell soit afficher au centre de ma tableView. J'ai implémenté
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.scrollToRow(at: indexPath, at: .middle, animated: true)
}
Le problème est que cela ne fonctionne ni pour les premières ni pour les dernières Cell.
J'ai plein d'idées compliqués en tête mais il doit y avoir une idée simple.
D'avance merci pour votre aide
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu ne peux jamais avoir ni la première cellule, ni la dernière, au centre. Qu'est-ce que tu imagines apparaà®tre au-dessus/en-dessous ?
Au dessus j'imaginais du blanc avec contentOffset ou des cellules vides non selectionables.
Après je vais peut-être m'orienter sur des données en à afficher en boucle un peu comme dans un picker. Mais là je bug, comment remplir ma table view avec des données en boucle comme dans les pickers?
Pourtant les pickers ont l'air de travailler avec une tableView. Je pense qu'il modifie le tableau qui sert de source de données pendant le scroll comme ["Lun", "Mar", "Mer", Jeu", "Ven", "Sam", "Dim"] qui passe à ["Mar", "Mer", Jeu", "Ven", "Sam", "Dim", "Lun"] quand on scroll.
Je vais partir sur des Pickers pour mon appli mais je laisse le sujet ouvert car cela me semble intéressant.
J'ai pensé à une autre solution: quand la tableview demande combien il y a de lignes, on peut donner une valeur très grande, comme Int.max. Et on demande à scroller à la ligne Int.max/2 (à rectifier pour être multiple de nbrItems).
Ensuite, on peut obtenir le numéro de l'item par
item = indexPath.row % nbrItems
Je n'ai pas tous les détails, mais l'idée est que Int.max est tellement grand qu'il n'y a aucune chance que l'utilisateur fasse défiler jusque-là .
Vu qq part sur SO, donner une très grande valeur gent INT_MAX génère des bugs