Come faccio a far apparire un UITableViewCell disabilitato?


Risposte:


164

Puoi semplicemente disabilitare i campi di testo della cella per disattivarli:

Swift 4.x

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

17
O un po 'più breve:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen

51
più breve ma più ugglier però
sport

25

Un'estensione Swift che funziona bene nel contesto in cui la sto usando; il tuo chilometraggio può variare.

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
        }
    }
}

Ora è solo questione di chiamare myCell.enable(truthValue).


22

Grazie a @Ajay Sharma, ho capito come far UITableViewCell apparire un disabilitato:

// 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];

E poi, per disabilitare effettivamente la cella:

cell.userInteractionEnabled = NO;

Sì, certo, potresti fare lo stesso anche in questo modo, impostando l'alfa :)
Ajay Sharma

18

Prova a usare un piccolo trucco:

Basta impostare l'alfa della cella. Metti alcune condizioni come requisiti personali e imposta l'alfa.

cell.alpha=0.2;

Se non funziona, come vuoi che sia allora, usa il secondo trucco,

Basta scattare un'immagine della dimensione della cella con uno sfondo grigio con sfondo trasparente, basta aggiungere quell'immagine nell'immagine sopra il contenuto della cella. Come questo:

// 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;
}

Anche se non sono sicuro del modo in cui, ma questo soddisferà sicuramente le tue esigenze, questo darà una sorta di illusione nella mente dell'utente che la cella è Disabilita. Prova a usare questa soluzione, spero che risolva il tuo problema.


5
cell.alpha = 0.2 - non funziona per me. cell.ContentView.Alpha = 0.2 ha funzionato per me
Michal Dobrodenka

Lo stesso qui che l'impostazione di cell.alpha - non funziona, l'impostazione di cell.ContentView.alpha fa il lavoro
infinity_coding7

4

Grande estensione di Kevin Owens, questa è la mia correzione per lavorare con 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
        }
    }
}

Usa .isUserInteractionEnabled in Swift 3.0
Matias Masso

4

Swift 4.X

Bella estensione di Kevin Owens, sto correggendo il comportamento del cellulare.

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

Come chiamarlo: -

cell.enable(on: switch.isOn)


2

Ho creato la seguente estensione per abilitare / disabilitare UITableViewCell, è molto comodo da usare. Crea l'estensione UITableViewCell con "UITableViewCell + Ext.h" che contiene quanto segue.

@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" contiene quanto segue in esso.

@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

Come disabilitare la cella:

[cell enableCell:NO withText:NO];

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

Come abilitare la cella:

[cell enableCell:YES withText:NO];

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

Spero ti aiuti.


1

per swift

cell.isUserInteractionEnabled = false

Ciò non influisce sull'aspetto della cellula.
Womble
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.