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

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


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;

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.


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

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)


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.


1

untuk cepat

cell.isUserInteractionEnabled = false

Ini tidak mempengaruhi penampilan sel.
Womble
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.