0

我在 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 值?

谢谢你。

4

2 回答 2

1

所以我知道还有两年的时间,但我和你一样解决了同样的问题,偶然发现了这个问题。我碰巧使用的是 iOS 8,但问题似乎相同:我有一个静态表格视图,其中包含几个单元格,我想在初始表格视图设置中调整其 alpha。进行这些调整cellForRowAtIndexPath没有奏效。调整后的每个单元格都以 1.0 的 alpha 显示在屏幕上,尽管我将它们的 alpha 记录在 0 英寸cellForRowAtIndexPath

由于我对调整单个部分的所有单元格感兴趣,因此我能够通过在以下内容中包含一些内容来获得所需的功能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;
    }
}

您将需要逻辑来确定哪些单元格要调整 in 的 alpha ,并使用Not as beautiful as a single line call inviewWillAppear检索它们,但也不算太糟糕。cellForRowAtIndexPath.cellForRowAtIndexPath

于 2015-02-18T21:53:49.970 回答
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]];
于 2013-06-28T14:17:25.577 回答