Bir UITableViewCell'i nasıl devre dışı bırakabilirim?


Yanıtlar:


166

Hücrenin metin alanlarını devre dışı bırakmak için devre dışı bırakabilirsiniz:

Swift 4.x

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

17
Veya biraz daha kısa:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen

51
daha kısa ama daha çirkin
spor

25

Kullandığım bağlamda iyi çalışan bir Swift uzantısı; kilometreniz değişebilir.

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

Şimdi bu sadece bir arama meselesi myCell.enable(truthValue).


22

@Ajay Sharma sayesinde, bir nasıl anladım UITableViewCell görünür engelli:

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

Ve sonra, hücreyi gerçekten devre dışı bırakmak için:

cell.userInteractionEnabled = NO;

Tabii Evet, :) alfa ayarlayarak, çok bu şekilde aynı yapabileceğini
Ajay Sharma

18

Küçük bir numara kullanmayı deneyin:

Sadece hücrenin alfa değerini ayarlayın. Koşulları kendi gereksinimleriniz olarak koyun ve alfa'yı ayarlayın.

cell.alpha=0.2;

İşe yaramazsa, olmasını istediğiniz gibi, ikinci numara kullanın,

Sadece Şeffaf Arka Plan ile gri arka plana sahip hücre boyutunun bir görüntüsünü alın, bu görüntüyü hücre içeriğinin üzerine görüntüye ekleyin. Bunun gibi:

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

Yol hakkında emin olmasam da, bu kesinlikle ihtiyacınızı karşılayacaktır.Bu, kullanıcının zihninde hücrenin Devre Dışı Bırakıldığına dair bir tür yanılsama yaratacaktır. Sadece bu çözümü kullanmayı deneyin, umarım bu probleminizi çözer.


5
cell.alpha = 0.2 - benim için çalışmıyor. cell.ContentView.Alpha = 0.2 benim için çalıştı
Michal Dobrodenka

Burada da cell.alpha ayarının çalışmaması, cell.ContentView.alpha'nın ayarlanması işi yapar
infinity_coding7

4

Kevin Owens'tan harika bir eklenti, Swift 2.x ile çalışmak için yaptığım düzeltme :

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

Swift 3.0'da .isUserInteractionEnabled'ı kullanın
Matias Masso

4

Swift 4.X

Kevin Owens'tan Güzel Eklenti, hücrenin davranışını düzeltiyorum.

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

Buna nasıl denir: -

cell.enable(on: switch.isOn)


2

UITableViewCell'i Etkinleştirmek / Devre Dışı Bırakmak için aşağıdaki uzantıyı oluşturdum, onu kullanmak çok kolay. "UITableViewCell + Ext.h" ile UITableViewCell Uzantısı oluşturun, içinde aşağıdakileri içerir.

@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", içinde aşağıdakileri içerir.

@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

Hücre Nasıl Devre Dışı Bırakılır:

[cell enableCell:NO withText:NO];

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

Hücre Nasıl Etkinleştirilir:

[cell enableCell:YES withText:NO];

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

Umarım size yardımcı olur.


1

hızlı için

cell.isUserInteractionEnabled = false

Bu, hücrenin görünümünü etkilemez.
Womble
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.