85 votes

Comment faire en sorte qu'un UITableViewCell semble désactivé?

Je connais UITableview: Comment désactiver la sélection de certaines lignes mais pas d’autres et cell.selectionStyle = UITableViewCellSelectionStyleNone , mais comment puis-je faire en sorte qu'une cellule (ou tout UIView d'ailleurs) apparaisse désactivée (grisée - comme ci-dessous?

UITableViewCell désactivé

158voto

Symmetric Points 1581

Vous pouvez également simplement désactiver les champs de texte de la cellule pour les griser:

     cell.userInteractionEnabled = NO;
    cell.textLabel.enabled = NO;
    cell.detailTextLabel.enabled = NO;
 

22voto

MattDiPasquale Points 23842

Grâce à @Ajay Sharma, j'ai découvert comment faire en sorte qu'un UITableViewCell apparaisse désactivé:

 // Mac's native DigitalColor Meter reads exactly {R:143, G:143, B:143}.
cell.textLabel.alpha = 0.439216f; // (1 - alpha) * 255 = 143
aSwitch.enabled = NO; // or [(UISwitch *)cell.accessoryView setEnabled:NO];
 

Et puis, pour réellement désactiver la cellule:

 cell.userInteractionEnabled = NO;
 

18voto

Ajay Sharma Points 4320

Essayez d'utiliser une petite astuce:

Il suffit de régler l'alpha de la cellule. Mettre une condition en tant que vos propres besoins et définir l'alpha.

cell.alpha=0.2;

Si cela ne fonctionne pas,la façon dont vous voulez qu'il soit ensuite, Utilisez deuxième astuce,

Il suffit de prendre une image de la taille des cellules ayant un fond gris avec un Fond Transparent, il suffit d'ajouter cette image dans l'image sur le contenu de la cellule. Comme ceci:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...


    if(indexPath.row==0)
    {
        cell.userInteractionEnabled=FALSE;

        UIImageView *img=[[UIImageView alloc]init];
        img.frame=CGRectMake(0, 0, 320, 70);
        img.image=[UIImage imageNamed:@"DisableImage.png"];
        img.backgroundColor=[UIColor clearColor];
        [cell.contentView addSubview:img];
        [img release];

    }
    else {
        //Your usual code for cell interaction.

    }
    return cell;
}

Bien que je ne suis pas sûr de la façon dont,mais ce sera certainement répondre à votre exigence.Cela permettra de donner une sorte d'illusion dans l'esprit de l'utilisateur que la cellule est Désactiver. Simplement essayer d'utiliser cette solution.Espère que cela va résoudre votre problème.

2voto

Aqib Mumtaz Points 214

J'ai créé à la suite de l'extension pour Activer/Désactiver UITableViewCell, il est très pratique à utiliser. Créer UITableViewCell Extension avec des "UITableViewCell+Ext.h" contient suivantes.

@interface UITableViewCell (Ext)

- (void)enableCell:(BOOL)enabled withText:(BOOL)text;
- (void)enableCell:(BOOL)enabled withText:(BOOL)text withDisclosureIndicator:(BOOL)disclosureIndicator;
- (void)disclosureIndicator:(BOOL)disclosureIndicator;

@end

"UITableViewCell+Ext.m" contiennent suivantes.

@implementation UITableViewCell (Ext)

- (UITableView *)uiTableView {
    if ([[UIDevice currentDevice] systemVersionIsGreaterThanOrEqualTo:@"7.0"]) {
        return (UITableView *)self.superview.superview;
    }
    else {
        return (UITableView *)self.superview;
    }
}

- (void)enableCell:(BOOL)enabled withText:(BOOL)text {
    if (enabled) {
        self.userInteractionEnabled = YES;

        if (text) {
            self.textLabel.alpha = 1.0f;
            self.alpha = 1.0f;
            self.detailTextLabel.hidden = NO;
        }
    }
    else {
        self.userInteractionEnabled = NO;

        if (text) {
            self.textLabel.alpha = 0.5f;
            self.alpha = 0.5f;
            self.detailTextLabel.hidden = YES;
        }
    }
}

- (void)enableCell:(BOOL)enabled withText:(BOOL)text withDisclosureIndicator:(BOOL)disclosureIndicator {
    if (enabled) {
        self.userInteractionEnabled = YES;

        if (text) {
            self.textLabel.alpha = 1.0f;
            self.alpha = 1.0f;
            self.detailTextLabel.hidden = NO;
        }

        self.accessoryType = disclosureIndicator ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
    }
    else {
        self.userInteractionEnabled = NO;

        if (text) {
            self.textLabel.alpha = 0.5f;
            self.alpha = 0.5f;
            self.detailTextLabel.hidden = YES;
        }

        self.accessoryType = UITableViewCellAccessoryNone;
    }
}

- (void)disclosureIndicator:(BOOL)disclosureIndicator {
    if (disclosureIndicator) {
        self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    else {
        self.accessoryType = UITableViewCellAccessoryNone;
    }
}

@end

Comment faire pour Désactiver la Cellule:

[cell enableCell:NO withText:NO];

[cell enableCell:NO withText:YES withDisclosureIndicator:YES];

Comment faire pour Activer la Cellule:

[cell enableCell:YES withText:NO];

[cell enableCell:YES withText:YES withDisclosureIndicator:YES];

Espérons qu'il vous aide.

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