2013-01-22 4 views
0

У меня есть таблица, состоящая из пользовательских ячеек таблицы, которые содержат изображение. В cellForRowAtIndexPath я устанавливаю изображение каждой ячейки. Я хочу, чтобы изображение изменилось, когда ячейка выбрана, поэтому в didSelectRowAtIndexPath Я получаю ячейку и меняю изображение, никаких проблем нет. Однако, когда я просматриваю таблицу (read: table reloads cells), новое изображение больше не присутствует. Также, когда ячейка больше не выбрана, я хочу, чтобы изображение переключилось обратно на оригинал.Изменение UIImage в пользовательском tableviewcell

Я пытался делать следующее cellForRowAtIndexPath:

if(cell.isSelected){ 
cell.imageview.image = [UIImage ImageNamed: @"selected.png"]; 
} 
else 
cell.imageview.image = [UIImage ImageNamed: @"not selected.png"]; 

Я также попытался с помощью BOOL значения cell.highlighted или cell.selected безрезультатно.

Любые мысли приветствуются.

+1

вы можете также оставлять вас r, который делает ячейку? Из-за механизма повторного использования некоторые неприятные вещи могут пойти не так с cell.isSelected. Другой подход заключается в том, чтобы сохранить строку выбранной ячейки в качестве свойства. –

+0

Показать весь код для 'didSelectRowAtIndexPath' и' didDeselectRowAtIndexPath' и 'cellForRowAtIndexPath' –

ответ

2

Попробуйте использовать переменную класса selectedCellIndexPath типа NSIndexPath. В didSelectRow... вы установите это значение, и в cellForRow... Вы пишете:

if([selectedCellIndexPath isEqual:indexPath]){ 
    cell.imageview.image = [UIImage ImageNamed: @"selected.png"]; 
} else { 
    cell.imageview.image = [UIImage ImageNamed: @"not selected.png"]; 
} 

Edit:

Или вы могли бы просто написать:

if([indexPath isEqual:[tableView indexPathForSelectedCell]]){ 
    cell.imageview.image = [UIImage ImageNamed: @"selected.png"]; 
} else { 
    cell.imageview.image = [UIImage ImageNamed: @"not selected.png"]; 
} 

но первый раствор немного больше эффективный.

+0

Спасибо, что сделал, я могу принять ваш ответ за 3 минуты и сделать – JeffN

0

Если у вас есть массив с именем Картинки было бы проще всего изменить имя в выбранном индексе в массиве и перезагрузки таблицы ... Как это:

myImageArray = [[NSMutableArray alloc] init]; 
[myImageArray addObject:@"name1.jpg"]; 
[myImageArray addObject:@"name2.jpg"]; 
// etc.. 

И в cellForRowAtIndexPath Метод:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
} 

[cell.imageView setImage:[UIImage imageNamed:[myImageArray objecAtIndex:indexPath.row]]]; 

} 

в didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

[myImageArray setObject:@"newName.jpg" atIndexedSubscript:indexPath.row]; 
[tableView reloadData]; 

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