Bouton Supprimer personnalisé lors de l'édition dans une cellule UITableView

StackOverflow https://stackoverflow.com/questions/1615469

  •  06-07-2019
  •  | 
  •  

Question

J'ai parcouru cette question qui affiche le code suivant:

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"Sagar";
}

Et si je veux une image personnalisée à la place du bouton rouge par défaut?

Était-ce utile?

La solution

luvieere a raison - si vous voulez utiliser le même " delete " métaphore, vous voulez le garder sur le bouton rouge fourni par Apple. Pourquoi le changer? Il est mondialement reconnaissable en tant que norme pour les boutons de suppression.

Bien que, si vous voulez quelque chose comme Tweetie, où vous changez complètement le comportement de balayage, vous pouvez utiliser quelque chose comme ABTableViewCell où vous dessinez simplement dans votre propre vue. Créez une vue de table personnalisée, remplacez -touchesBegan: withEvent:, et vérifiez les retouches. Calculez le delta des deux contacts (dans touchesMoved: withEvent :) et déplacez votre propre vue.

Autres conseils

Implémentez cette méthode dans une cellule personnalisée

- (void)willTransitionToState:(UITableViewCellStateMask)state{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
                UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
                [deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
                [[subview.subviews objectAtIndex:0] addSubview:deleteBtn];
                [deleteBtn release];
            }
        }
    }
}

C’est une réponse tardive, mais j’espère que cela pourra vous être utile. La réponse acceptée semble donc un peu compliquée pour moi, et la réponse de @ user1684899 ne fonctionne que si vous souhaitez simplement modifier l'aspect du bouton Supprimer. Je veux changer complètement l'apparence du bouton Supprimer (c'est-à-dire son cadre, sa position, etc.), ma solution consiste donc à ajouter mon propre bouton Supprimer à ma cellule personnalisée et à le garder initialement masqué, et à ne l'afficher que lorsque la cellule est en mode édition. Plus important encore, je veux masquer le bouton de suppression d'origine iOS et prendre en charge la compatibilité descendante. Voici mon astuce:

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];
    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
    {
        if (!IS_IOS_7){
            for (UIView *subview in self.subviews)
            {
                if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
                {
                    // hide original button
                    [[subview.subviews objectAtIndex:0] setHidden:YES];
                    // show my custom button
                    [self.deleteButton setHidden:NO];
                }
            }

        } else {
            for (UIView *subview in self.subviews) {
                for (UIView *subview2 in subview.subviews) {
                    if ([NSStringFromClass([subview2 class]) rangeOfString:@"Delete"].location != NSNotFound) {
                        // hide original button
                        [subview2 setHidden:YES];
                        // show my custom button
                        [self.deleteButton setHidden:NO];
                    }
                }
            }
        }
    } else {
        // hide my custom button otherwise
        [self.deleteButton setHidden:YES];
    }
}

Et n'oubliez pas d'ajouter:

[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];

dans cellForRowAtIndexPath , afin que vous puissiez ajouter ce que vous voulez lorsque vous cliquez sur le bouton de suppression. Voici mon résultat:

entrer la description de l'image ici

Comme vous l'avez dit dans le commentaire sur la réponse de luvieere, la norme à l'échelle du système pour l'action de déplacement de liste prévue consiste à utiliser l'accessoire de cellule de divulgation détaillée (flèche entourée de bleu), et non le geste de balayage.

Cela dit, si vous souhaitez toujours utiliser l'action de balayage à cette fin, vous ne pouvez pas créer votre propre bouton sans intercepter manuellement et réimplémenter complètement le geste de balayage, comme le fait Tweetie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top