2010-07-15 6 views
8

Ceci est vraiment plus une question de curiosité qu'une question de codage.UITableViewCell Balayage pour Tiroir

Facebook et Twitter disposent tous les deux d'une fonction permettant de faire glisser une cellule UITableViewCell sur le côté pour révéler un tiroir avec plus de contrôles en dessous. Comment est-ce que quelque chose comme ça est accompli?

Répondre

6

Voici une bonne méthode open source pour faire exactement cela, en fonction du comportement de l'application Twitter:

https://github.com/thermogl/TISwipeableTableView

+0

Fonctionne pour moi! :) – AWrightIV

+0

Eh bien, ça a presque toujours marché pour moi. Malheureusement, ce projet utilise des méthodes obsolètes pour le dessin. Je suis en cours sur une implémentation moderne, alors peut-être que je posterai quelque chose quand j'en serai satisfait. – AWrightIV

+0

Vous trouverez également un exemple sur la façon de détecter les gestes de balayage sur un UITableView sur notre blog http://blog.blackwhale.at/?p=795 – anka

1

Vous pouvez simplement implémenter -tableView:willBeginEditingRowAtIndexPath: dans votre délégué de vue de table.

From the doc,

Cette méthode est appelée lorsque l'utilisateur glisse horizontalement sur une rangée; ... Cette méthode donne au délégué l'opportunité d'ajuster l'interface utilisateur de l'application en mode d'édition.

+0

Cette méthode n'inclut pas automatiquement un bouton de suppression? Je ne pense pas que DVG le veuille, et je sais que non. – AWrightIV

+0

Il fait automatiquement ce que vous lui fournissez dans le délégué pour la méthode tableView: (UITableView *) tableView editingStyleForRowAtIndexPath: (NSIndexPath *) indexPath' – superhawk610

+1

Donc, si vous renvoyez 'UITableViewCellEditingStyleNone' à cette méthode, il n'effectuera aucune action automatique, vous permettant de faire comme vous s'il vous plaît :) – superhawk610

3

2 façons de détecter l'action swipt

  1. regard sur la méthode willTransitionToState: de UITableViewCell. cette méthode sera invoquée lorsque vous balayez la cellule.

  2. Custom swipe detection in a TableViewCell

et vous pouvez modifier votre point de vue cellulaire facilement.

+0

La détection de balayage est la partie facile. C'est l'animation glissante et montrant une vue séparée qui est difficile. – AWrightIV

1

Comme un UITableViewCell est juste un , vous pouvez utiliser ce fait pour faire tout ce que vous voulez.

Pour résoudre votre problème, j'attacher un UISwipeGestureRecognizer pour détecter le glissement, puis animer la vue dans un état différent. Par exemple, vous pouvez créer une cellule personnalisée dont la vue de contenu est située au-dessus de la «vue des actions». Chaque fois qu'il y a un balayage, vous utilisez une animation UIView pour déplacer la vue du contenu de côté et montrer la vue de l'action avec quelques boutons à la place. Dans un UITableViewCell personnalisé, vous pouvez ajouter un protocole de délégué pour que l'action pressée et la cellule soient envoyées au délégué, c'est-à-dire votre contrôleur. Là, vous déclenchez tout ce qui est nécessaire pour déclencher puis faire sortir la cellule de l'état.

+0

Les sous-vues peuvent-elles exister en dehors de contentView d'UITableViewCell? Je n'ai pas réussi à faire fonctionner cette méthode. – AWrightIV

+0

Oui, il peut. Le bouton Supprimer et les vues d'arrière-plan ne sont que deux exemples. –

5

C'est un problème que je l'ai essayé quelques solutions différentes pour. J'ai vraiment aimé le comportement de Mailbox (mailboxapp.com). Alors je me suis mis en tête d'y parvenir. Au final, je me suis retrouvé avec ce que je crois être une solution très simple: utiliser un UIScrollView dans votre cellule. J'ai blog post qui traite et un sample app qui démontre ce comportement.

+0

Cela semble astucieusement simple, merci pour le conseil! –

Questions connexes