我在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;
}
这里的代码相当简单,我问超级单元格(因为self是UITableViewController的子类,它应该不是问题),然后配置单元格。如果当前索引路径上的单元格依赖于另一个设置,我禁用单元格(我剥离了一些不相关的其他代码行。)
输出显示:
...
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值?
谢谢。
答案 0 :(得分:1)
所以我知道这是两年后的事情,但我遇到了与你完全相同的问题并且偶然发现了这个问题。我碰巧使用iOS 8,但问题似乎是一样的:我有一个静态表格视图,其中有几个单元格,我想在初始表格视图设置中调整alpha。在cellForRowAtIndexPath
中进行这些调整无效。调整的每个单元格在屏幕上显示的alpha值为1.0,尽管我在cellForRowAtIndexPath
中将其alpha值记录为0。
由于我有兴趣调整单个部分的所有单元格,因此我能够通过在viewWillAppear
中包含这些内容来获得所需的功能:
- (void)changeAlphaOfCells:(float)alpha
{
for (int i = 0; i < NUMBER_OF_ROWS_IN_SECTION; i++)
{
UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:SECTION_NUMBER]];
cell.alpha = alpha;
}
}
您需要逻辑来确定调整viewWillAppear
中的字母数据的细胞,并使用cellForRowAtIndexPath.
检索它们不像cellForRowAtIndexPath
中的单行调用那样优雅,但不是太糟糕了。
答案 1 :(得分:0)
我认为你无法像这样直接访问单元格的alpha。试试这个
编辑:
UIColor *colorWithAlphaOfPointFour = [UIColor colorWithRed:0 green:0 blue:0 alpha:.4];
[[cell contentView] setBackgroundColor:[UIColor colorWithAlphaOfPointFour]];
[[cell backgroundView] setBackgroundColor:[UIColor colorWithAlphaOfPointFour]];
[cell setBackgroundColor:[UIColor colorWithAlphaOfPointFour]];