Dans la vidéo WWDC 2013, Apple suggère d'afficher le sélecteur en place dans une vue de tableau dans iOS 7. Comment insérer et animer une vue entre les cellules de vue de tableau?
Comme ceci, depuis l'application de calendrier Apple:
Dans la vidéo WWDC 2013, Apple suggère d'afficher le sélecteur en place dans une vue de tableau dans iOS 7. Comment insérer et animer une vue entre les cellules de vue de tableau?
Comme ceci, depuis l'application de calendrier Apple:
Réponses:
Avec iOS7, Apple a publié l'exemple de code
DateCell
.Vous pouvez télécharger l'exemple de code ici: DateCell .
la source
Vous pouvez utiliser la réponse que j'avais précédemment donnée ci-dessous ou utiliser cette nouvelle classe dans Swift que j'ai créée pour rendre cette tâche beaucoup plus simple et plus propre: https://github.com/AaronBratcher/TableViewHelper
Je trouve que le code fourni par Apple pose problème de plusieurs manières:
Pour les tableaux de cellules statiques, je définis ma cellule de sélection de date sous ma cellule d'affichage de date et j'ai un indicateur identifiant si je la modifie. Si c'est le cas, je renvoie une hauteur de cellule appropriée, sinon je renvoie une hauteur de cellule de zéro.
Lorsque l'on clique sur la ligne indiquant la date, je change le drapeau et fais l'animation de mise à jour pour afficher le sélecteur.
Si j'ai plusieurs sélecteurs de date / heure dans la même table, je place les drapeaux en conséquence sur le clic et recharge les lignes appropriées. J'ai constaté que je pouvais conserver ma table statique, utiliser beaucoup moins de code et il était plus facile de comprendre ce qui se passe.
la source
En utilisant le storyboard et une table statique, j'ai pu obtenir le même résultat en utilisant le code suivant. C'est une excellente solution car si vous avez de nombreuses cellules de forme étrange ou si vous souhaitez avoir plusieurs cellules qui sont affichées / masquées dynamiquement, ce code fonctionnera toujours.
la source
[tableView reloadData];
appel n'est pas nécessaire. Actuellement, il désactive la sélection de ligne, mais il est préférable de désélectionner la ligne comme ceci:[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
J'ai pris la source DateCell d'Apple et supprimé le fichier de storyboard.
Si vous en voulez un sans storyboard, jetez un œil à: https://github.com/ajaygautam/DateCellWithoutStoryboard
la source
UIDatePicker
parUIPickerView
. J'ai essayé peu de choses et je suis capable d'afficherpickerView
sur chaque cellule mais cela n'est pas mis à jour avec chaque cellule. J'ai publié ma question et mon code ici . Jetez un œil et ce serait très gentil si vous pouviez me suggérer une solution.UIDatePicker
avecUIPickerView
mais avec quelques bugs. 1. Il se bloque lorsque vous ouvrezUIPickerView
et faites défiler le tableau. 2. Il attribue automatiquement la valeur àUILabel
Détail dans les lignes inférieures du tableau lorsque des valeurs sont affectées à l'étiquette Détails sur les lignes supérieures. Voici mon codeL'un des meilleurs tutoriels à ce sujet est UIDatePicker en ligne iOS 7 - Partie 2 . Fondamentalement, j'utilise des cellules de vue de tableau statiques et implémente des méthodes supplémentaires. J'ai utilisé Xamarin et C # pour cela:
Vous devez être actif
Clip Subviews
.Réglage de la hauteur:
Qu'une variable de classe:
private bool datePickerIsShowing = false;
Afficher le sélecteur de date:
Masquer le sélecteur de date:
Et en appelant ces fonctions:
la source
J'ai créé mon propre contrôleur de vue personnalisé pour simplifier le processus d'ajout d'un sélecteur en ligne en ligne dans une vue de table. Vous le sous-classez simplement et suivez quelques règles simples et il gère la présentation du sélecteur de date.
Vous pouvez le trouver ici avec un exemple de projet qui montre comment l'utiliser: https://github.com/ale84/ALEInlineDatePickerViewController
la source
J'ai trouvé une réponse à une faille dans l'exemple de datecell d'Apple où vous devez avoir une ligne sous la dernière datecell ou vous obtenez une erreur. Dans la méthode CellForRowAtIndexPath, remplacez la ligne ItemData par
Après avoir remplacé l'exemple de code, je peux maintenant afficher une cellule datePicker sans avoir de cellule en dessous.
Je viens de rejoindre stackoverflow, donc si ce n'est pas au bon endroit ou ailleurs, je m'excuse.
la source
La réponse d'Aaron Bratcher a fonctionné sauf lorsqu'elle est utilisée avec plusieurs sections. Les animations étaient un peu saccadées et cela n'a pas très bien glissé les sections suivantes. Pour résoudre ce problème, j'ai parcouru le prochain ensemble de sections et traduit les lignes du même montant que la hauteur du sélecteur de date.
J'ai modifié le didSelectRowAtIndexPath en:
la source
En ajoutant aux réponses précédentes,
J'ai essayé les solutions @datinc et @Aaron Bratcher, les deux fonctionnaient très bien mais l'animation n'était pas si propre dans un tableau statique groupé.
Après avoir joué un peu avec, je suis arrivé à ce code qui fonctionne parfaitement et très bien pour moi -
Le principal changement est d'utiliser -
pour mettre à jour la ligne, de cette façon, le reste des sections et cellules du tableau ne sont pas animés.
J'espère que ça aide quelqu'un.
Shani
la source
Ajout aux réponses précédentes et à la solution @Aaron Bratcher ...
J'avais des animations saccadées depuis iOS 9, et la table prenait un certain temps à se charger, et suffisamment pour être ennuyeuse. Je l'ai réduit au fait que les sélecteurs de dates étaient lents à charger à partir du storyboard. L'ajout des sélecteurs par programmation plutôt que dans le storyboard a amélioré les performances de chargement et, en tant que sous-produit, l'animation est plus fluide.
Supprimez le sélecteur de date du storyboard et disposez d'une cellule vide, dont vous définissez la hauteur comme dans les réponses précédentes, puis appelez une initialisation sur viewDidLoad:
Ensuite, mettez en œuvre l'action, par exemple
Cela charge la table beaucoup plus rapidement qu'auparavant. Vous supprimez également la ligne d'animation
didSelectRowAtIndexPath
car elle s'anime en douceur sans elle (ymmv).la source
L'utilisation de cette réponse sans l'animation fonctionne correctement dans iOS 8.1. Je l'ai converti en Swift ci-dessous:
la source
Voici une autre façon de résoudre le problème sans nombres constants statiques. Toutes les cellules peuvent être utilisées dans des vues de tableau statiques et dynamiques. Cette méthode utilise une seule cellule pour le sélecteur de titre et de date!
D'ailleurs, vous pouvez avoir autant de sélecteurs de dates dans votre table que vous le souhaitez!
Créez une sous-classe UITableViewCell :
Créer une classe CPDatePickerTableViewCell à partir de notre CPTableViewCell
Dans votre contrôleur de vue, implémentez ces deux méthodes de délégation
Exemple de configuration des contraintes dans le générateur d'interface
De plus, j'ai écrit des classes de cellules personnalisées pour UITextField et UITextView où tableView: didSelectRowAtIndexPath: est appelée lorsque la cellule est sélectionnée!
CPTextFieldTableViewCell
CBTextViewTableViewCell
La hauteur de la cellule est dynamique et la ligne augmente lorsque le texte est renvoyé à la ligne!
la source
La manière la plus simple d'utiliser DateCell dans la version Swift: utilisez cet exemple .
Faites glisser la classe « DateCellTableViewController.swift » vers votre projet.
Ouvrez "Main.storyboard" et copiez l'objet ViewController " DateCell " et collez-le dans votre storyboard.
la source