我在 iOS 6.1 应用程序中有一个经典的 UITableViewController。表格视图是静态的并在情节提要中设置,它意味着使用 UITableViewCellAccessoryCheckmark 作为 ON/OFF 开关来表示可配置的设置。TableView 中有一个部分根据其他设置禁用另一个单元格。使用以下代码禁用单元格:
cell.userInteractionEnabled = NO;
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.alpha = 0.4;
加载 TableView 后,代码工作正常。
问题是加载 TableView 时,禁用的单元格代码无法正常工作,因为代码中的 alpha 设置不起作用。UserInteractionEnabled 属性有效,但不是 alpha 设置。
这是在加载视图时应禁用 UITableViewCell 的代码。
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
if (cell)
{
...
if ([[self currentSettingForIndexPath:indexPath] isEqualToString:@"myDependencySetting"])
{
...
cell.userInteractionEnabled = NO;
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.alpha = 0.4;
NSLog(@"Disabling cell: %0.2f", cell.alpha);
...
}
else
{
cell.alpha = 1.0;
cell.userInteractionEnabled = YES;
}
}
NSLog(@"Cell alpha: %0.2f", cell.alpha);
return cell;
}
这里的代码比较简单,我问super for cell(因为self是UITableViewController的子类,应该没问题),然后配置cell。如果当前索引路径上的单元格取决于另一个设置,我会禁用该单元格(我删除了一些其他不相关的代码行)。
输出内容如下:
...
Cell alpha: 1.00
...
Cell alpha: 1.00
Disabling cell: 0.40
Cell alpha: 0.40
Cell alpha 1.00
...
因此,根据输出,单元格的 alpha 属性设置正确。但是单元格 alpha 没有设置,但是由于 userInteractionEnabled,单元格不可点击。
相同的代码可用于禁用 tableView 的委托 didSelectRowAtIndex 中的单元格。
问题是:为什么以及什么可以覆盖单元格的 alpha 值?
谢谢你。