Le développement et la réduction UITableViewCells avec DatePicker
Je suis en train de construire une application qui permet à l'utilisateur de sélectionner des dates à partir d'un UITableView. La tableView est statique et regroupés. J'ai regardé à travers de nombreuses questions, y compris cette une, à essayer de comprendre comment faire - mais rien ne semble fonctionner optimale. Apple calendrier de l'app dispose d'une très lisse et agréable animation qu'aucun des exemples que j'ai vécu ont réussi à recréer.
C'est mon résultat souhaité:
Quelqu'un pourrait-il m'indiquer un tutoriel, ou d'expliquer comment je peux accomplir une telle animation fluide avec la plus concise et simple de la faire, comme nous le voyons dans l'application calendrier?
Merci beaucoup!
Erik
- est votre tableview statique ou prototype?
- c'est un statique et regroupés tableView
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous utilisez la table de montage séquentiel, l'exemple est avec
UIPickerView
:Créer un tableviewcell droit, en vertu de la cellule qui contient la zone de texte que vous voulez remplir et de définir les cellules de la hauteur de ligne à 216.0 dans l'inspecteur et ajouter un UIPickerView à cette cellule.
De la prochaine connexion de l'UIPickerView sur la Sortie de votre viewcontroller et ajouter la propriété suivante à votre ViewController.h:
Dans votre ViewController.m ne dans
viewWillAppear
Ajouter deux méthodes:
Dans
heightForRowAtIndexPath
Dans
didSelectRowAtIndexPath
UIPicker
l'intérieur d'une cellule (qui est peut-être mon incompréhension). Quelle est exactement votre storyboard-il organisé?The datePicker outlet is invalid. Outlets cannot be connected to repeating content
Les 2 réponses ci-dessus m'a permis de résoudre ce problème. Ils méritent le crédit, je suis en ajoutant ce un rappel pour moi - résumé format.
C'est ma version des réponses ci-dessus.
1. Comme indiqué ci-dessus - ajouter un sélecteur de pour une la cellule que vous souhaitez afficher /masquer.
2. Ajouter des contraintes pour le sélecteur dans interface builder - centre X /Y center /égale hauteur /largeur égale à la cellule d'affichage de contenu
3. Connectez le sélecteur de vous VC
Vous pourriez aussi bien le contrôle de glisser et ajouter une méthode qui vous permettra d'enregistrer le changement de la date
4. Dans le viewDidLoad
5. Réglage de la hauteur de cellule, dans mon exemple, la cellule, je veux élargir la section 0, ligne 3... jeu de ce à quoi vous de la cellule que vous souhaitez développer /masquer. Si vous avez un grand nombre de cellules avec différentes hauteurs ceci permet que.
6. La sélection de la cellule ci-dessus pour agrandir le un ci-dessous, définissez cette option sur la cellule vous vous appuyez pour afficher la cellule ci-dessous.
J'ai mis en place @thorb65 de réponse rapide, et il fonctionne comme un charme. Même si j'ai mis en place deux sélecteurs de date (par exemple, "début" et "fin" comme dans le calendrier), et de les configurer pour que l'on s'effondre automatiquement lorsque expaning l'autre (c'est à dire, "on a ouvert à un temps maximum" de la politique, tout comme le Calendrier), la (simultanées) les animations sont toujours en douceur.
Une chose que j'ai du mal avec, cependant, est de trouver la bonne mise en page automatique des contraintes. La suite m'a donné le même comportement que le Calendrier.app:
Contraint de UIDatePicker vers lui-même:
Contraint de UIDatePicker contre UITableViewCell de l'affichage du contenu:
Résultat de l'animation
"En bas de l'Espace de Conteneur Marge" est explicitement laissé de côté, pour faire respecter fixe la hauteur tout au long de l'animation (ce qui recrée Calendrier.application du comportement, où la vue de la table de la cellule "glisser" pour révéler l'immuable, fixe-hauteur de sélecteur de date ci-dessous).
Contraint de UIDatePicker vers lui-même:
Contraint de UIDatePicker contre UITableViewCell de l'affichage du contenu:
Résultat de l'animation
Remarquerez la différence de la raison des contraintes dans le de développer/réduire animation.
EDIT: C'est le code swift
Propriétés:
UIViewController méthodes:
UITableViewDelegate Méthodes:
Sélecteur De Date Des Actions De Contrôle:
Auxiliaire Méthodes: (animation, le formatage de la date)
UITableView
a un couple de méthodes pour le faire défiler par programme pour un poste donné; lisez les docs.J'ai travaillé sur ça aussi, et j'ai pensé que je pourrais partager ma solution, qui est dérivée à partir de celles déjà fournies ici.
Ce que j'ai remarqué, c'est qu'il y a beaucoup de code dans les autres exemples spécifiques à chacun des éléments, et donc ce que j'ai fait était de créer un "manager" de la classe de traiter avec elle pour n'importe quel élément.
Voici ce que j'ai fait:
La
CellShowHideDetail
magasins de détails sur l'élément que vous souhaitez afficher ou masquer. Ces détails incluent la cellule elle est, et aussi la cellule qui seront exploitées afin de basculer l'affichage et le masquage:Noter que
UIView
est un parent de la classe de la plupart (tous?) Éléments de l'INTERFACE utilisateur.Ensuite, nous avons le manager, qui va traiter le plus grand nombre de ces éléments que vous le souhaitez:
Vous pouvez créer facilement un
CellShowHideManager
sur touteUITableViewController
catégorie, ajouter les éléments que vous souhaitez à bascule-mesure:Enfin, il suffit de remplacer ces deux
TableView
méthodes comme suit:Et cela devrait fonctionner bien!
Je partage ma réponse:
Je fais tout sans storyboard
Swift 3
1.1 ajouter le datePicker
1.2 et sa méthode
2. puis, dans la loadView affichage de la date dans la cellule ci-dessus au format
3. ajouter datePicker de la cellule
4. réglez la hauteur de la cellule
si(indexPath.section == 1 && indexPath.ligne == 0) {
Code complet est ici avec d'autres éléments viens d'obtenir un sentiment de travail d'application
Juste pensé que je voudrais ajouter mon grain de sel aussi. Je suis actuellement à la programmation en Xamarin et a dû faire quelques petits ajustements à faire fonctionner dans le cadre de Xamarin.
Tous les principes sont les mêmes, mais comme Xamarin utilise une catégorie distincte pour les TableViewSource et la gestion de délégués est différent. Bien sûr, vous pouvez toujours affecter UITableViewDelegates si vous voulez aussi bien dans le UIViewController, mais j'étais curieux de savoir si je pourrais l'obtenir pour fonctionner de cette façon:
Pour commencer je sous-classé à la fois la Date de Sélecteur de Cellules (datePickerCell) et le sélecteur de cellules (selectorCell). Note de côté, je le fais à 100% par programmation sans un StoryBoard
datePickerCell:
Sélecteur De Cellules
Donc, comme vous pouvez le voir, j'ai quelques méthodes exposées à partir de chaque cellule pour faciliter la nécessaire communication. J'ai alors nécessaire de créer une instance de ces cellules dans ma tableViewSource. Peut-être qu'il est un moins le couplage façon de le faire, mais je ne pouvais pas facile à comprendre. Je crois que je suis beaucoup moins d'expérience en programmation iOS que mes prédécesseurs ci-dessus :). Cela dit, avec les cellules disponibles dans le cadre de la classe, il est très facile d'appeler et d'accéder à des cellules dans le RowSelected et GetHeightForRow méthodes.
TableViewSource
Espère que le code est assez explicite. La méthode toDateTime btw est juste une extension de la méthode pour convertir NSDateTime à un .net objet DateTime. La référence peut être trouvé ici: https://forums.xamarin.com/discussion/27184/convert-nsdate-to-datetime et DefaultiOSDimensions est juste un petit statique de la classe que j'utilise pour garder une trace de dimensions standard tels que cellHeight (44pts) ou, dans le cas de
heightForDatePicker
; 216. Il semble que cela fonctionne très bien pour moi sur mon simulateur. Je n'ai pas encore tester sur elle périphériques réels. Espérons que cela aide quelqu'un!