50 votes

Faites glisser le doigt pour exposer les “Plus” de "Flag" "Archive" boutons (comme dans l'application de Messagerie sur iOS 8)

Comment faire pour afficher les boutons personnalisés lorsque l'utilisateur glisser une cellule dans le tableau de la vue (comme application de messagerie dans iOS 8)

Je voudrais que lorsque l'utilisateur de glisser sur une vue de la table de la cellule, afin d'exposer les boutons (par défaut, le bouton supprimer iOS 7 et au début). Dans l'application de Messagerie pour iOS 8, vous pouvez faire glisser et de les exposer à 3 boutons "Plus", "Drapeau" "Archive". Je veux afficher les autres boutons de différentes couleurs et le titre.

Est-ce qu'Apple fournit des API dans UITableView pour cela ?

Merci

71voto

timothykc Points 524

Johnny réponse est la bonne pour upvote. Je suis juste en ajoutant cette ci-dessous en objective-c pour le rendre plus clair pour les débutants (et ceux d'entre nous qui refusent d'apprendre Swift syntaxe :)

Assurez-vous de déclarer le uitableviewdelegate et ont des méthodes suivantes:

 -(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
    {
        NSLog(@"Action to perform with Button 1");
    }];
    button.backgroundColor = [UIColor greenColor]; //arbitrary color
    UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                    {
                                        NSLog(@"Action to perform with Button2!");
                                    }];
    button2.backgroundColor = [UIColor blueColor]; //arbitrary color

    return @[button, button2]; //array with all the buttons you want. 1,2,3, etc...
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:

}
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES; //tableview must be editable or nothing will work...
    }

67voto

Johnny Points 877

Comment mettre en Œuvre

iOS 8 a ouvert cette API.

Pour obtenir ce fonctionnement, de mettre en œuvre l'une des deux méthodes suivantes sur votre UITableView déléguée pour obtenir l'effet désiré (voir le code pour un exemple).

- tableView:editActionsForRowAtIndexPath:
- tableView:commitEditingStyle:forRowAtIndexPath:


Problèmes Connus

La UITableView.h fichier indique les éléments suivants concernant tableView:commitEditingStyle:forRowAtIndexPath:

"N'est pas nécessaire de modifier les actions à l'aide de UITableViewRowAction - l'action du gestionnaire sera invoqué à la place."

Cependant, le balayage n'est pas possible sans elle. Ce qui semble être un bug.


Sources

https://twitter.com/marksands/status/481642991745265664 https://gist.github.com/marksands/76558707f583dbb8f870


Exemple De Code:

Ceci est basé sur la valeur par défaut de Maître-Détail Application de modèle (c'est rapide): http://dropbox.com/s/0fvxosft2mq2v5m/DeleteRowExampleSwift.zip

39voto

MortimerGoro Points 481

J'ai créé une nouvelle bibliothèque à mettre en œuvre swippable boutons qui prend en charge une variété de transitions et extensible boutons comme iOS 8 application de messagerie.

https://github.com/MortimerGoro/MGSwipeTableCell

Il fonctionne sur iOS >= 5.0

Par exemple, une transition qui imite celui de l'iOS 8 App Mail:

enter image description here

-9voto

arpan_techisavy Points 174

Son ridicule d'utiliser un tiers de l'API. Il suffit d'utiliser ces deux délégué méthodes d' UITableView

-(NSString *)tableView:(UITableView *)tableView titleForSwipeAccessoryButtonForRowAtIndexPath:(NSIndexPath *)indexPath;
-(void)tableView:(UITableView *)tableView swipeAccessoryButtonPushedForRowAtIndexPath:(NSIndexPath *)indexPath;

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