Ios 使动态加载的UITableViewCell ImageView在选中时更改颜色

Ios 使动态加载的UITableViewCell ImageView在选中时更改颜色,ios,uitableview,ios7,sdwebimage,Ios,Uitableview,Ios7,Sdwebimage,我希望这是一个简单的问题,我只是错过了一些明显的东西。我的表格单元格-ScheduleCell是动态创建的。所有内容都来自已解析的JSON负载。cell的图像--cellImage也是动态的,并使用SDWebImage框架实现。当选定一个单元格时,该单元格会变为灰色,但图像不会。我想这样做,当细胞被选中的图像改变颜色以及。如果我能改变图片的色调,那会很棒吗?有没有一个简单的方法可以做到这一点 我的细胞是直接创建的: - (UITableViewCell *)tableView:(UITableV

我希望这是一个简单的问题,我只是错过了一些明显的东西。我的表格单元格-ScheduleCell是动态创建的。所有内容都来自已解析的JSON负载。cell的图像--cellImage也是动态的,并使用SDWebImage框架实现。当选定一个单元格时,该单元格会变为灰色,但图像不会。我想这样做,当细胞被选中的图像改变颜色以及。如果我能改变图片的色调,那会很棒吗?有没有一个简单的方法可以做到这一点

我的细胞是直接创建的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    ScheduleCell *cell = (ScheduleCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if (cell == nil)
    {
        cell = [[ScheduleCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }

    NSDictionary *event = self.schedule[self.sections[[indexPath section]]][indexPath.row];
    cell.dayLabel.text          = [event objectForKey:@"start_date"];
    cell.nameLabel.text         = [event objectForKey:@"name"];
    cell.dayOfWeekLabel.text    = [event objectForKey:@"start_day"];
    cell.monthLabel.text        = [event objectForKey:@"monthShort"];

    [cell.cellImage setFrame:CGRectMake(91, 24, 230, 85)];
    [cell.cellImage setImageWithURL:[NSURL URLWithString:[[event objectForKey:@"pic_cover"] objectForKey:@"source"]] placeholderImage:[UIImage imageNamed:@"placeholder230x85.png"] usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)UIActivityIndicatorViewStyleGray];
    cell.backgroundColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.0];

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 110;
}
这就是我的单元格在被选中时的外观:

以下是我的IB设置的屏幕截图:


一个简单的方法是添加一个UIView作为图像视图的子视图,并给它一个小于1的alpha值,这样图像就可以显示出来。您可以使用任何颜色为图像添加色调。

最简单的方法是使用透明背景渲染PNG,并从API获取这些颜色

如果这不起作用,您可以使用使白色部分透明,但这也会使杰克逊维尔捷豹内部透明(如果它是完全相同的白色;我没有检查)


这里有一个可以帮助解决这个问题的方法。(不难尝试,看看它是否适用于您的应用程序。)

您需要从服务器获取透明的背景PNG,这将是最简单的修复方法,但我并不总是能够控制将哪些类型的图像上载到服务器。有些是在徽标周围有白色背景的JPEG。是的,因为jpg没有alpha通道,所以需要PNG图像。或者,如果jps是唯一的选项,那么您可以尝试
imageView.opaque=NO
设置Alpha
或其他(不确定)我是这么想的,但我不确定如何正确实现它,因为我必须禁用UIView上的用户交互,但是当选择单元格时,它仍然会有颜色变化。您必须更新UITableViewCell子类的
setSelected:
setHighlighted:
方法中的颜色变化。这种方法的问题是,它会在选择时使图像变暗,而其他标签/文本视图在选择时都不会变暗。@DJSK:或者简单地覆盖一个
UIView
,alpha设置为0,而
setBackgroundColor
设置为
lightGray
,当您选择单元格时,将alpha设置为
0.5
或其他内容。您应该禁用
UIView
UIImageView
上的用户交互,以便
touchEvent
直接进入单元格是的,我希望尽可能避免图像变暗。这就是为什么我希望能给它添点色彩。有没有办法在UIView覆盖解决方案上使用混合模式?