Як зробити так, щоб UITableViewCell здавався відключеним?


86

Я знаю про UITableView: Як Вибір Відключити для деяких рядків , але не інші і cell.selectionStyle = UITableViewCellSelectionStyleNone, але як я можу зробити осередок (або який - або UIViewз цього питання) з'являються відключені (сірий колір) , як показано нижче?

вимкнено UITableViewCell

Відповіді:


164

Ви можете просто вимкнути текстові поля клітинки, щоб сірими:

Свіфт 4.x

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

17
Або трохи коротше:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen

51
коротший, але потворніший
спорт

25

Розширення 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
        }
    }
}

Свіфт 3:

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

Тепер це лише питання дзвінка myCell.enable(truthValue).


22

Завдяки @Ajay Sharma, я зрозумів, як зробити UITableViewCell появу інвалідом:

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

А потім, щоб фактично вимкнути комірку:

cell.userInteractionEnabled = NO;

Так, звичайно, ви могли б зробити те саме таким чином, встановивши альфа :)
Аджай Шарма

18

Спробуйте скористатися невеликим фокусом:

Просто встановіть альфа-клітинку. Поставте якусь умову як власні вимоги та встановіть альфу.

cell.alpha=0.2;

Якщо це не працює, як вам тоді подобається, використовуйте другий фокус,

Просто візьміть зображення розміру комірки із сірим фоном із прозорим фоном, просто додайте це зображення на зображення над вмістом комірки. Подобається це:

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

Хоча я не впевнений у шляху, але це, безсумнівно, виконає ваші вимоги. Це дасть певну ілюзію у свідомості користувача, що клітинка відключена. Просто спробуйте скористатися цим рішенням, сподіваючись, що це вирішить вашу проблему.


5
cell.alpha = 0,2 - у мене не працює. cell.ContentView.Alpha = 0,2 спрацював на мене
Міхал Доброденка

Тут те саме, що налаштування cell.alpha - не працює, налаштування cell.ContentView.alpha виконує роботу
infinity_coding7

4

Чудове розширення від Кевіна Оуенса, це моє виправлення для роботи з 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
        }
    }
}

Свіфт 3:

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

Use .isUserInteractionEnabled in Swift 3.0
Matias Masso

4

Свіфт 4.X

Приємне розширення від Кевіна Овенса, я виправляю поведінку клітини.

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

Як це назвати: -

cell.enable(on: switch.isOn)


2

Я створив наступне розширення для Увімкнення / Вимкнення UITableViewCell, дуже зручно ним користуватися. Створіть розширення UITableViewCell із "UITableViewCell + Ext.h", що містить у собі наступне.

@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" містить в собі наступне.

@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

Як вимкнути клітинку:

[cell enableCell:NO withText:NO];

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

Як увімкнути комірку:

[cell enableCell:YES withText:NO];

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

Сподіваюся, це допоможе вам.


1

для швидкого

cell.isUserInteractionEnabled = false

Це не впливає на зовнішній вигляд клітини.
Womble
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.