我在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请求单元格(由于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值
谢谢。
所以我知道还有两年的时间,但我遇到了和你一样的问题,偶然发现了这个问题。我碰巧使用的是iOS8,但问题似乎是一样的:我有一个静态表视图,其中有几个单元格,我想在初始表视图设置时调整它们的alpha。在cellForRowAtIndexPath
中进行这些调整是无效的。调整后的每个细胞在屏幕上显示的α为1.0,尽管我在cellForRowAtIndexPath
中记录了它们的α为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
中调整哪些单元格的alpha,并使用cellForRowAtIndexPath.
检索它们。这不像cellForRowAtIndexPath
中的单行调用那么优雅,但也不算太糟糕。
我认为你不能像那样直接访问单元格的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]];