Bagaimana cara membuat UITableViewCell tampak dinonaktifkan?

Jawaban:

166

Anda bisa menonaktifkan bidang teks sel menjadi abu-abu:

Cepat 4.x

cell!.isUserInteractionEnabled = false
cell!.textLabel!.isEnabled = false
cell!.detailTextLabel!.isEnabled = false
Simetris
sumber
17
Atau sedikit lebih pendek:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen
51
lebih pendek tetapi lebih ugglier
olahraga
25

Ekstensi Swift yang bekerja dengan baik dalam konteks yang saya gunakan; jarak tempuh Anda mungkin berbeda.

Cepat 2.x

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

Cepat 3:

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

Sekarang tinggal masalah menelepon myCell.enable(truthValue).

Kevin Owens
sumber
22

Terima kasih kepada @Ajay Sharma, saya menemukan cara untuk membuatnya UITableViewCell tampak dinonaktifkan:

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

Dan kemudian, untuk benar - benar menonaktifkan sel:

cell.userInteractionEnabled = NO;
ma11hew28
sumber
Ya Tentu saja, Anda juga dapat melakukan hal yang sama dengan cara ini, dengan menyetel alpha :)
Ajay Sharma
18

Coba gunakan trik kecil:

Cukup atur alpha sel. Letakkan beberapa kondisi sebagai persyaratan Anda & setel alfa.

cell.alpha=0.2;

Jika tidak berhasil, seperti yang Anda inginkan, Gunakan trik kedua,

Ambil saja gambar ukuran sel yang memiliki latar belakang abu-abu dengan Latar Belakang Transparan, cukup tambahkan gambar itu dalam gambar di atas konten sel. Seperti ini:

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

Meskipun saya tidak yakin dengan caranya, tapi ini pasti akan memenuhi kebutuhan Anda, ini akan memberikan semacam ilusi di benak pengguna bahwa sel tersebut adalah Disable. Coba saja gunakan solusi ini.Harap itu akan menyelesaikan masalah Anda.

Ajay Sharma
sumber
5
cell.alpha = 0,2 - tidak berfungsi untuk saya. cell.ContentView.Alpha = 0,2 bekerja untuk saya
Michal Dobrodenka
Hal yang sama di sini bahwa pengaturan cell.alpha - tidak berfungsi, pengaturan cell.ContentView.alpha melakukan pekerjaan itu
infinity_coding7
4

Ekstensi hebat dari Kevin Owens, inilah koreksi saya untuk bekerja dengan 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
        }
    }
}

Cepat 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
sumber
Gunakan .isUserInteractionEnabled di Swift 3.0
Matias Masso
4

Cepat 4.X.

Perpanjangan yang bagus dari Kevin Owens, saya mengoreksi perilaku sel.

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

Bagaimana menyebutnya: -

cell.enable(on: switch.isOn)

Ashu
sumber
2

Saya telah membuat ekstensi berikut untuk Mengaktifkan / Menonaktifkan UITableViewCell, sangat nyaman untuk menggunakannya. Buat Ekstensi UITableViewCell dengan "UITableViewCell + Ext.h" yang berisi mengikuti di dalamnya.

@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" berisi mengikuti di dalamnya.

@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

Cara Menonaktifkan Sel:

[cell enableCell:NO withText:NO];

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

Cara Mengaktifkan Sel:

[cell enableCell:YES withText:NO];

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

Semoga membantu Anda.

Aqib Mumtaz
sumber
1

untuk cepat

cell.isUserInteractionEnabled = false
Nilesh
sumber
Ini tidak mempengaruhi penampilan sel.
Womble