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

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).


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;

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.


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

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)


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.


0

für schnell

cell.isUserInteractionEnabled = false

Dies hat keinen Einfluss auf das Erscheinungsbild der Zelle.
Womble
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.