Wie kann ich eine UITableViewCell deaktiviert anzeigen?

Antworten:

164

Sie können die Textfelder der Zelle einfach deaktivieren, um sie auszublenden:

Swift 4.x.

cell!.isUserInteractionEnabled = false
cell!.textLabel!.isEnabled = false
cell!.detailTextLabel!.isEnabled = false
Symmetrisch
quelle
17
Oder etwas kürzer:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen
50
kürzer, aber hässlicher
Sport
25

Eine Swift-Erweiterung, die in dem Kontext, in dem ich sie verwende, gut funktioniert. Ihr Kilometerstand kann variieren.

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

Jetzt geht es nur noch darum anzurufen myCell.enable(truthValue).

Kevin Owens
quelle
22

Dank @Ajay Sharma habe ich herausgefunden, wie man ein deaktiviertes Bild UITableViewCell erscheinen lässt :

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

Und dann, um die Zelle tatsächlich zu deaktivieren:

cell.userInteractionEnabled = NO;
ma11hew28
quelle
Ja, natürlich können Sie das auch auf diese Weise tun, indem Sie das Alpha einstellen :)
Ajay Sharma
18

Versuchen Sie es mit einem kleinen Trick:

Stellen Sie einfach das Alpha der Zelle ein. Stellen Sie eine Bedingung als Ihre eigenen Anforderungen und stellen Sie das Alpha ein.

cell.alpha=0.2;

Wenn es nicht funktioniert, wie Sie es möchten, verwenden Sie den zweiten Trick.

Nehmen Sie einfach ein Bild der Zellengröße mit grauem Hintergrund und transparentem Hintergrund auf. Fügen Sie dieses Bild einfach über dem Zelleninhalt in das Bild ein. So was:

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

Ich bin mir zwar nicht sicher über den Weg, aber dies wird sicherlich Ihre Anforderung erfüllen. Dies wird eine Art Illusion in den Gedanken des Benutzers geben, dass die Zelle deaktiviert ist. Versuchen Sie einfach, diese Lösung zu verwenden. Hoffentlich löst dies Ihr Problem.

Ajay Sharma
quelle
5
cell.alpha = 0.2 - funktioniert bei mir nicht. cell.ContentView.Alpha = 0.2 arbeitete für mich
Michal Dobrodenka
Das gleiche gilt für das Festlegen von cell.alpha - funktioniert nicht. Das Festlegen von cell.ContentView.alpha erledigt den Job
infinity_coding7
4

Tolle Erweiterung von Kevin Owens, dies ist meine Korrektur für die Arbeit mit 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
        }
    }
}
Alessandro Ornano
quelle
Verwenden Sie .isUserInteractionEnabled in Swift 3.0
Matias Masso
3

Swift 4.X.

Schöne Erweiterung von Kevin Owens, ich korrigiere das Verhalten der Zelle.

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

So nennt man das: -

cell.enable(on: switch.isOn)

Ashu
quelle
2

Ich habe die folgende Erweiterung zum Aktivieren / Deaktivieren von UITableViewCell erstellt. Die Verwendung ist sehr praktisch. Erstellen Sie eine UITableViewCell-Erweiterung mit "UITableViewCell + Ext.h", die Folgendes enthält.

@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" enthält Folgendes.

@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

So deaktivieren Sie die Zelle:

[cell enableCell:NO withText:NO];

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

So aktivieren Sie die Zelle:

[cell enableCell:YES withText:NO];

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

Hoffe es hilft dir.

Aqib Mumtaz
quelle
0

für schnell

cell.isUserInteractionEnabled = false
Nilesh
quelle
Dies hat keinen Einfluss auf das Erscheinungsbild der Zelle.
Womble