121 votes

iOS 7 - Comment afficher un sélecteur de date en place dans une vue de table?

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 :

In-place date picker

102voto

Nitin Gohel Points 19461

Avec iOS7, Apple a publié l'exemple de code DateCell.

enter image description here

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.

enter image description here

Vous pouvez télécharger l'exemple de code ici: DateCell.

84voto

Aaron Bratcher Points 1384

- Je trouver le code fourni par Apple pour être problématique dans un couple des manières:

  • Vous ne pouvez pas avoir une statique tableView parce qu'ils sont à l'aide de la tableView:cellForRowAtIndexPath méthode
  • Le code se bloque si vous n'avez pas de lignes supplémentaires en dessous de la dernière date de sélecteur de cellules

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.

18voto

datinc Points 602

À 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.

5voto

Ajay Gautam Points 371

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

3voto

ale84 Points 501

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.com

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.

Powered by:

X