静态UITableView显示为禁用不透明alpha不起作用



我在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]];

最新更新