静态UITableView出现禁用opaque alpha不起作用

时间:2013-06-28 14:01:36

标签: ios 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;
}

这里的代码相当简单,我问超级单元格(因为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值?

谢谢。

2 个答案:

答案 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]];