2013-10-25 4 views
2

Возможно ли обновить изображение ячейки в iOS UITableView по тегу? Я понимаю, что доступны другие методы, но я хотел бы использовать теги, если это возможно.Обновление изображения ячейки UITableView по тегу

я установить изображение по:

cell.imageView.image = [UIImage imageNamed:@"dinner.png"]; 

А в другой метод, который я могу получить клетку путем (Метки всегда уникальны):

NSInteger the_tag = ((UIView*)sender).tag; 
UITableViewCell *updateCell = (UITableViewCell*)[tableView viewWithTag:the_tag]; 

Можно ли обновить ячейку с этим метод? Это не работает:

updateCell.imageView.image = [UIImage imageNamed:@"lunch.png"]; 

EDIT:

Подумав, что теги плохой метод использовать. Вы можете использовать (что даст вам строку и раздел, если у вас есть секционированной таблицы):

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { 
    NSLog(@"Tapped Row %@", indexPath); 
    UITableViewCell *cell = [self->tableView cellForRowAtIndexPath:indexPath]; 
    cell.imageView.image = [UIImage imageNamed:@"lunch.png"]; 
} 
+1

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

+0

Я думаю, вам нужно разместить [self.tableView beginUpdates]; перед вашим кодом и [self.tableView endUpdates]; за вашим кодом, чтобы заставить TableView обновить его содержимое. –

+0

Согласен, теги - плохой метод! Обновлен мой ответ. – Colin

ответ

1

попытка вызова [updateCell setNeedsLayout] или [updateCell.imageView setNeedsLayout]

+0

Благодарим вас за ответ. К сожалению, они вызывают «NSInvalidArgumentException», reason: '- [UIImageView imageView]: непризнанный селектор, отправленный в экземпляр «ошибка, как раньше». – Colin

+0

в соответствии с вашим журналом, похоже, что viewWithTag возвращает непосредственно ImageView, а не ячейку – slecorne

2
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = (CustomCell*)[tblView1 cellForRowAtIndexPath:indexPath.row]; 

    UIImageView *imageView = cell.imageView;//CustomCell you have imageView as @propertyVariable.. 
    imageView.image = [UIImage imageNamed:@"image.png"]; 
} 

Я надеюсь, что это будет полезно для вас .. .

0

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

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

if(cell == nil){ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    cell.tag = indexPath.row; 
    cell.imageView.image = [UIImage imageNamed:@"icon.png"]; 
} 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
int tag = 2;//this is same at table cell row number. 
UITableViewCell *cell = (UITableViewCell*)[tableView viewWithTag:tag]; 
cell.imageView.image = [UIImage imageNamed:@"image.png"]; 
} 
Смежные вопросы