1 votes

Autoriser le "swipe-to-delete" dans une instance de UITableViewDataSource, mais pas dans une autre

J'ai un UITableViewDataSource que j'utilise pour deux UITableViews différents. Dans l'une des vues de table, je veux activer la fonction "glisser-déplacer". tableView:commitEditingStyle:forRowAtIndexPath et cela fonctionne comme prévu. Cependant, dans une autre table, je veux désactiver cette fonctionnalité.

J'ai réussi à le faire fonctionner en créant deux classes UITableViewDataSource, l'une sous-classant l'autre, et j'implémente seulement tableView:commitEditingStyle:forRowAtIndexPath dans la sous-classe. Je les appelle RecipientModel et RecipientModelEditable.

Je me demande s'il y a un meilleur moyen.

3voto

anonymous Points 41

Je pense que vous voulez dire quelque chose comme ça :

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.isEditable) {
        return UITableViewCellEditingStyleDelete;
    }
    return UITableViewCellEditingStyleNone;
}

et ensuite dans le commitEditingStyle ne fait rien s'il n'est pas modifiable.

2voto

Jeff Kelley Points 12893

Vous pouvez créer deux instances de la même classe RecipientModel . Définir un BOOL variable d'instance, peut-être nommée isEditable . Votre interface pourrait ressembler à ceci :

@interface RecipientModel : NSObject <UITableViewDataSource> {
    BOOL isEditable;
}

@property ( readwrite ) BOOL isEditable;

@end

Et votre mise en œuvre pourrait ressembler à ceci :

@implementation RecipientModel

@synthesize isEditable;

- ( void )tableView:( UITableView * )tableView
 commitEditingStyle:( UITableViewCellEditingStyle )editingStyle
  forRowAtIndexPath:( NSIndexPath * )indexPath
{
    if ( self.isEditable ) {
        // Allow swipe.
    } else {
        // Disallow swipe.
    }
}

@end

Il convient de noter que la plupart des applications pour iPhone utilisent une UITableViewController pour mettre en œuvre la source de données et les méthodes de délégation de la vue de la table. Cette approche peut également être plus pertinente pour votre application.

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