Comment faire apparaître un UITableViewCell désactivé?


Réponses:


164

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

Swift 4.x

cell!.isUserInteractionEnabled = false
cell!.textLabel!.isEnabled = false
cell!.detailTextLabel!.isEnabled = false

17
Ou un peu plus court:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen

51
plus court mais plus moche
sports

25

Une extension Swift qui fonctionne bien dans le contexte dans lequel je l'utilise; Votre kilométrage peut varier.

Swift 2.x

extension UITableViewCell {
    func enable(on: Bool) {
        for view in contentView.subviews as! [UIView] {
            view.userInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

Swift 3:

extension UITableViewCell {
    func enable(on: Bool) {
        for view in contentView.subviews {
            view.isUserInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

Maintenant, c'est juste une question d'appeler myCell.enable(truthValue).


22

Grâce à @Ajay Sharma, j'ai compris comment faire UITableViewCell apparaître un 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 désactiver réellement la cellule:

cell.userInteractionEnabled = NO;

Oui, bien sûr, vous pourriez faire la même chose de cette façon aussi, en définissant l'alpha :)
Ajay Sharma

18

Essayez d'utiliser une petite astuce:

Définissez simplement l'alpha de la cellule. Mettez certaines conditions comme vos propres exigences et définissez l'alpha.

cell.alpha=0.2;

Si cela ne fonctionne pas, comme vous l'aimez alors, utilisez la deuxième astuce,

Prenez simplement une image de la taille de la cellule avec un fond gris avec un fond transparent, ajoutez simplement cette image dans l'image sur le contenu de la cellule. Comme ça:

// 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 sois pas sûr du chemin, cela répondra sûrement à vos besoins. Cela donnera une sorte d'illusion dans l'esprit de l'utilisateur que la cellule est désactivée. Essayez simplement d'utiliser cette solution. J'espère que cela résoudra votre problème.


5
cell.alpha = 0,2 - ne fonctionne pas pour moi. cell.ContentView.Alpha = 0.2 a travaillé pour moi
Michal Dobrodenka

La même chose ici que l' établissement cell.alpha - ne fonctionne pas, la mise en cell.ContentView.alpha fait le travail
infinity_coding7

4

Grande extension de Kevin Owens, voici ma correction pour travailler avec Swift 2.x :

extension UITableViewCell {
    func enable(on: Bool) {
        self.userInteractionEnabled = on
        for view in contentView.subviews {
            view.userInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

Swift 3:

extension UITableViewCell {
    func enable(on: Bool) {
        self.isUserInteractionEnabled = on
        for view in contentView.subviews {
            view.isUserInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

Utilisez .isUserInteractionEnabled dans Swift 3.0
Matias Masso

4

Swift 4.X

Belle extension de Kevin Owens, je corrige le comportement de la cellule.

extension UITableViewCell {
    func enable(on: Bool) {
        self.isUserInteractionEnabled = on
        for view in contentView.subviews {
            self.isUserInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

Comment appeler ça: -

cell.enable(on: switch.isOn)


2

J'ai créé l'extension suivante pour activer / désactiver UITableViewCell, il est très pratique de l'utiliser. Créez l'extension UITableViewCell avec "UITableViewCell + Ext.h" contenant les éléments suivants.

@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" contient ce qui suit.

@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 désactiver la cellule:

[cell enableCell:NO withText:NO];

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

Comment activer la cellule:

[cell enableCell:YES withText:NO];

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

J'espère que cela vous aide.


1

pour rapide

cell.isUserInteractionEnabled = false

Cela n'affecte pas l'apparence de la cellule.
Womble
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.