在UITableViewCell上使用自定义渐变时,未显示所选行背景

时间:2012-02-26 06:06:46

标签: ios ios5 uitableview

我有以下代码为UITableViewCell创建渐变背景。渐变很棒。但是,当我尝试选择一行时,我看不到常规的蓝色突出显示的行。如果我删除自定义渐变代码,选定的行突出显示工作正常。我不确定我在这里缺少什么。非常感谢任何帮助。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"TimeTableViewCellList";

TimeTableViewCell *cell = (TimeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[[NSBundle mainBundle] loadNibNamed:@"TimeCell" owner:self options:nil] lastObject];
    //To create the cell gradient

    UIColor *startColor = [UIColor whiteColor];
    UIColor *endColor = [UIColor colorWithRed:247.0/255.0 green:243.0/255.0 blue:238.0/255.0 alpha:1.0];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = cell.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[startColor CGColor], (id)[endColor CGColor], nil];
    [cell.layer insertSublayer:gradient atIndex:0];
}

TimeEntry * entry = [[self getTimeEntriesBySection:indexPath.section] objectAtIndex:indexPath.row];

//..OTHER CELL VALUES SET HERE   

cell.selectionStyle = UITableViewCellSelectionStyleBlue;


return cell;
}

2 个答案:

答案 0 :(得分:1)

以下是基于@jtruton的解决方案 以下是来自单元子类

的代码片段
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
   [super setSelected:selected animated:animated];
   if (selected) {
       self.theGradient.hidden = YES;
   } else {
       self.theGradient.hidden = NO;

   } 
}

答案 1 :(得分:0)

您的渐变图层将遮挡所选效果。

尝试将渐变图层添加到cell.contentView.layer。如果这不起作用,您可能必须使图层成为细胞子类的属性,并在覆盖setSelected:animated:

时更改其可见性