无法在cellForRowAtIndexPath中设置单元格alpha

时间:2012-06-29 22:25:49

标签: ios xcode uitableview

在我的代码的一部分中,我打电话

UITableViewCell *cell = (UITableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];

获取多个单元格,然后将其alpha更改为.35。这样可行,细胞看起来很褪色。

然而,当我滚动桌面视图时,移出窗口然后向后移动的单元格不再褪色。即使在cellForRowAtIndexPath中,每个禁用行的alpha设置为.35也会发生这种情况。

在返回cellForRowAtIndexPath中的单元格之前,我记录

NSLog(@"%f", cell.alpha);

它返回.35

然而,滚动后单元格没有褪色?在显示之前,它似乎神奇地变为1。

以下是我在Section类

中实现的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;

if ([self disabled]) 
{
    cell = [SectionedTableViewController tableView:tableView dequeueReusableCellWithIdentifier:@"CellDisabled" style:UITableViewCellStyleDefault];
    cell.alpha = .35;
}
else
{
    cell = [SectionedTableViewController tableView:tableView dequeueReusableCellWithIdentifier:@"CellEnabled" style:UITableViewCellStyleDefault];
    cell.alpha = 1;
}

cell.selectionStyle = UITableViewCellSelectionStyleNone;

//if-else block that only sets labels is here omitted

if (cell.textLabel.text == [[cs objectAtIndex:[self c]] type])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

NSLog(@"%f", cell.alpha);

return cell;

}

协调这些部分的视图控制器会从中获取单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Alpha: %f", [[[self sections] objectAtIndex:indexPath.section] tableView:tableView cellForRowAtIndexPath:indexPath].alpha);
    return [[[self sections] objectAtIndex:indexPath.section] tableView:tableView cellForRowAtIndexPath:indexPath];
}

(并且NSLog正在记录适当的alpha值)

3 个答案:

答案 0 :(得分:13)

将所有子视图添加到单元格的contentView,并在-cellForRowAtIndexPath中使用以下字符串:

cell.contentView.alpha = {needed_value};

适合你。

答案 1 :(得分:2)

此问题可能是由于在表视图中重用了单元格。有更好的方法:

您应该在视图控制器中创建一个NSMutableDictionary,并为需要淡化的索引设置键。

然后,在cellForRowAtIndexPath中,在设置单元格时,根据索引是否作为字典中的键存在来设置alpha。

此解决方案无需任何奇怪的行为即可运行。

答案 2 :(得分:1)

确保您也为cell.contentView设置了Alpha值。同样在tableView:willDisplayCell:forRowAtIndexPath:中设置alpha,因为它可能无法在iOS 7中使用