我如何使一个UITableViewCell出现禁用?

我知道关于UITableview:如何禁用某些行而不是其他select和cell.selectionStyle = UITableViewCellSelectionStyleNone ,但我如何使一个单元格(或任何UIView为此)出现禁用(灰色)如下?

禁用UITableViewCell

您可以禁用单元格的文本字段以将其变灰:

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

感谢@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; 

尝试使用一个小窍门:

只要设置单元格的alpha。 把一些条件作为你自己的要求和设置阿尔法。

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

虽然我不是很确定,但是这肯定会满足你的要求。这会给用户一个错觉,认为这个单元格是Disable的。 只要尝试使用这个解决scheme。希望能解决你的问题。

Swift扩展在我使用的上下文中运行良好; 你的旅费可能会改变。

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

现在只需要调用myCell.enable(truthValue)

来自Kevin Owens的巨大扩展,这是我对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 } } } 

我创build了以下扩展来启用/禁用UITableViewCell,使用它非常方便。 使用“UITableViewCell + Ext.h”创buildUITableViewCell扩展包含以下内容。

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

希望它可以帮助你。