Làm cách nào để làm cho UITableViewCell có vẻ như bị vô hiệu hóa?


Câu trả lời:


164

Bạn chỉ có thể tắt các trường văn bản của ô để tô xám chúng:

Swift 4.x

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

17
Hoặc ngắn hơn một chút:cell.userInteractionEnabled = cell.textLabel.enabled = cell.detailTextLabel.enabled = NO;
Thomas Kekeisen

51
ngắn hơn nhưng xấu hơn mặc dù
thể thao

25

Một tiện ích mở rộng Swift hoạt động tốt trong bối cảnh tôi đang sử dụng nó; số dặm của bạn có thể thay đổi.

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

Bây giờ nó chỉ là một vấn đề của cuộc gọi myCell.enable(truthValue).


22

Nhờ @Ajay Sharma, tôi đã tìm ra cách để làm cho một UITableViewCell xuất hiện tàn tật:

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

Và sau đó, để thực sự vô hiệu hóa ô:

cell.userInteractionEnabled = NO;

Có Tất nhiên, bạn cũng có thể làm điều tương tự theo cách này, bằng cách đặt alpha :)
Ajay Sharma

18

Hãy thử sử dụng một thủ thuật nhỏ:

Chỉ cần đặt alpha của ô. Đặt một số điều kiện như yêu cầu của riêng bạn và đặt alpha.

cell.alpha=0.2;

Nếu nó không hoạt động, theo cách bạn muốn, hãy sử dụng thủ thuật thứ hai,

Chỉ cần lấy một hình ảnh có kích thước ô có nền màu xám với Nền trong suốt, chỉ cần thêm hình ảnh đó vào hình ảnh trên nội dung ô. Như thế này:

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

Mặc dù tôi không chắc chắn về cách thức, nhưng điều này chắc chắn sẽ đáp ứng được yêu cầu của bạn. Chỉ cần thử sử dụng giải pháp này, hy vọng nó sẽ giải quyết được vấn đề của bạn.


5
cell.alpha = 0,2 - không hoạt động đối với tôi. cell.ContentView.Alpha = 0,2 làm việc cho tôi
Michal Dobrodenka

Tương tự ở đây, thiết lập cell.alpha - không hoạt động, thiết lập cell.ContentView.alpha thực hiện công việc
infinity_coding7

4

Phần mở rộng tuyệt vời từ Kevin Owens, đây là sự điều chỉnh của tôi để làm việc với 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
        }
    }
}

Sử dụng .isUserInteractionEnabled trong Swift 3.0
Matias Masso

4

Swift 4.X

Phần mở rộng tuyệt vời từ Kevin Owens, tôi đang sửa hành vi của tế bào.

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

Cách gọi cái này: -

cell.enable(on: switch.isOn)


2

Tôi đã tạo tiện ích mở rộng sau để Bật / Tắt UITableViewCell, rất thuận tiện để sử dụng nó. Tạo Tiện ích mở rộng UITableViewCell với "UITableViewCell + Ext.h" có chứa thông tin sau trong đó.

@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" chứa thông tin sau trong đó.

@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

Cách tắt ô:

[cell enableCell:NO withText:NO];

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

Cách bật ô:

[cell enableCell:YES withText:NO];

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

Hy vọng nó sẽ giúp bạn.


1

nhanh chóng

cell.isUserInteractionEnabled = false

Điều này không ảnh hưởng đến sự xuất hiện của ô.
Womble
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.