Dans vidéo 2013 WWDC, Apple suggère afficher sélecteur en place dans une vue de table dans iOS 7. Comment insérer et animer une vue entre cellules d’affichage un tableau ?
Comme ça, de l’application de calendrier d’Apple :
Dans vidéo 2013 WWDC, Apple suggère afficher sélecteur en place dans une vue de table dans iOS 7. Comment insérer et animer une vue entre cellules d’affichage un tableau ?
Comme ça, de l’application de calendrier d’Apple :
Avec iOS7, Apple a publié l'exemple de code DateCell
.
Montre affichage avec mise en forme de la date d'objets dans les cellules de tableau et de l'utilisation de UIDatePicker de modifier ces valeurs. En tant que délégué à ce tableau, l'exemple utilise la méthode "didSelectRowAtIndexPath" pour ouvrir la UIDatePicker de contrôle.
Pour iOS 6.x et versions antérieures, UIViewAnimation est utilisé pour glisser le UIDatePicker sur l'écran et vers le bas hors de l'écran. Pour iOS 7.x, le UIDatePicker est ajouté en ligne à la vue de la table.
La méthode d'action de la UIDatePicker permettra de définir directement la NSDate propriété de la coutume cellule de tableau. En outre, cet exemple montre comment utiliser NSDateFormatter classe pour atteindre la cellule personnalisé de la date format de l'apparence.
Vous pouvez télécharger l'exemple de code ici: DateCell.
- Je trouver le code fourni par Apple pour être problématique dans un couple des manières:
Pour statique de la cellule de tables, je définir mon sélecteur de date de cellules en dessous de ma date d'affichage de la cellule et ont un drapeau d'identification si je suis en train de modifier. Si je le suis, je retourne une hauteur de cellule appropriée, sinon je retourne a la hauteur de la cellule de zéro.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 2) { // this is my picker cell
if (editingStartTime) {
return 219;
} else {
return 0;
}
} else {
return self.tableView.rowHeight;
}
}
Lorsque la ligne indiquant la date est cliqué, j'ai changer le drapeau et faire la mise à jour de l'animation pour afficher le sélecteur.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0 && indexPath.row == 1) { // this is my date cell above the picker cell
editingStartTime = !editingStartTime;
[UIView animateWithDuration:.4 animations:^{
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:2 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView reloadData];
}];
}
}
Si j'ai plusieurs date/heure cueilleurs dans le même tableau, j'ai mis les drapeaux en conséquence sur le clic et de le recharger les lignes appropriées. J'ai constaté que je peux garder mon tableau statique, utiliser beaucoup moins de code, et il est plus facile de comprendre ce qui se passe.
À l’aide de la table de montage séquentiel et une table statique, j’ai pu obtenir le même résultat en utilisant le code suivant. Il s’agit d’une excellente solution car si vous avez plusieurs cellules de formes irrégulière, ou voulez avoir plusieurs cellules qui sont dynamiquement montré/caché ce code fonctionne toujours.
J’ai pris la source DateCell d’Apple et supprimé le fichier de la table de montage séquentiel.
Si vous le souhaitez sans table de montage séquentiel, jetez un oeil à : https://github.com/ajaygautam/DateCellWithoutStoryboard
J’ai fait mon propre contrôleur d’affichage personnalisé pour simplifier le processus d’ajout d’une ligne de sélecteur intraligne dans une tableview. Vous sous-classe juste elle et suivre quelques règles simples et il gère la présentation de sélecteur de date.
Vous pouvez le trouver ici avec un projet exemple qui montre comment l’utiliser : https://github.com/ale84/ALEInlineDatePickerViewController
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.