2013-12-05 3 views
0

Я надеюсь, что это простой вопрос, и я просто пропущу что-то очевидное. Мои ячейки таблицы - ScheduleCell создаются динамически. Весь контент поступает из разобранной полезной нагрузки JSON. Изображения ячейки - cellImage также динамичны и реализованы с использованием инфраструктуры SDWebImage. Когда ячейка выбрана, ячейка превращается в серое просто отлично, но изображения нет. Я хотел бы сделать это, когда ячейка будет выбрана, и цвет изображений изменится. Если бы я мог изменить оттенок изображений, что было бы здорово? Есть простой способ сделать это?Сделайте динамически загруженный UITableViewCell ImageView измените цвет при выборе

Мои клетки создаются довольно прямо вперед:

- (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; 
} 

Это как мои клетки выглядят теперь, когда они выбраны:

enter image description here

Вот снимок экрана мои настройки IB:

enter image description here

+3

Вам нужно получить PNG с прозрачным фоном с сервера – Kevin

+0

Это было бы самым простым исправлением, но я не всегда могу контролировать, какие типы изображений загружаются на сервер. Некоторые из них всегда будут JPEG с белым фоном вокруг логотипов. – DJSK

+0

Да, изображения PNG, необходимые, поскольку jpg не имеют альфа-канала. или если jps является единственным вариантом, вы можете попробовать «imageView.opaque = NO;» или «setAlpha' к нему или что-то (_not sure_) – staticVoidMan

ответ

1

Простым способом сделать это будет добавление UIView в качестве подвид представления изображения и присвоение ему альфа-значения меньше единицы, поэтому ваше изображение будет показано. Вы можете сделать любой цвет, который хотите добавить к вашему изображению.

+0

Это то, о чем я думал, но я не знал, как его правильно реализовать, Мне нужно было бы отключить взаимодействие с пользователем в UIView, но все же у него будет изменение цвета при выборе ячейки. – DJSK

+1

Вам нужно будет обновить изменение цвета в подклассах UETableViewCell 'setSelected:' и 'setHighlighted:'. –

+1

Проблема с этим подходом заключается в том, что он будет уменьшать изображение при выборе, в то время как ни один из других меток/текстовых представлений не может быть выбран при выборе. –

0

Самый простой ответ - визуализировать PNG с прозрачным фоном и получить их из вашего API.

Если это не сработает, вы можете использовать Quartz 2D image masks, чтобы сделать прозрачную прозрачную часть прозрачной, но это также сделает прозрачную прозрачную прозрачную прозрачную прозрачную прозрачную пленку (если это точно такой же белый цвет, я не проверял).

Вот Stack Overflow question and answer, который должен помочь в этом. (Нетрудно попробовать и посмотреть, будет ли это работать для вашего приложения.)

Смежные вопросы