在我的代码的一部分中,我打电话
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值)
答案 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中使用