2015-02-18 2 views
0

У меня есть ячейка custoum с изображением, и я хочу изменить изображение только при выборе ячейки.Изменить изображение из ячейки custoum

Это я пытался:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 


    if (!tableView.tag==0) { 

     TableViewCell2 *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
     if (!cell) { 
      cell=[[TableViewCell2 alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"]; 
     } 
    // cell.cam.image = [UIImage imageNamed:@"cam_normal.png"]; 
    cell.cam.highlightedImage = [UIImage imageNamed:@"cam_selected.png"]; 
    } 
} 

, но изображение не меняется. Это работает для нормальной ячейки.

Другая попытка была это cellForRowAtIndexPath

if (cell.selected==TRUE) { 
      cell.cam.image=[UIImage imageNamed:@"cam_selected.png"]; 
     } 
+0

Вы хотите иметь один или несколько вариантов выбора? И хотите ли вы, чтобы пользователь мог отменить выбор ячейки и изменить изображение? – sikhapol

ответ

0

Вы уже получаете соту в качестве параметра, но принести еще один при использовании dequeueReusableCellWithIdentifier!

попробовать что-то вроде этого:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!tableView.tag==0) 
    { 
     TableViewCell2 *changeImageCell = (TableViewCell2*) cell; 
     changeImageCell.cam.highlightedImage = [UIImage imageNamed:@"cam_selected.png"]; 
    } 
} 
+0

Большое спасибо –

0

Вы должны сделать 2 вещи:

1. Смените изображение сразу при выборе ячейки.

Для этого вы должны сначала реализовать делегата UITableViewCell. Но поскольку у вас уже есть tableViewWillDisplayCel:forRowAtIndexPath:, я предполагаю, что у вас уже есть делегирование.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    TableViewCell2 *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.cam.highlightedImage = [UIImage imageNamed:@"cam_selected"]; 
} 

Вы можете изменить изображение, когда пользователь отменит выбор ячейки.

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    TableViewCell2 *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.cam.highlightedImage = [UIImage imageNamed:@"cam_unselected"]; 
} 

2. Сохранять выбор, когда ячейка используется повторно.

Опять же, когда ячейка повторно используется, вы должны проверить, выбран ли она или нет. Затем соответствующим образом назначьте изображение.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    TableViewCell2 *cell = [tableView dequeReusableCellWithIdentifier:@"cell"]; 
    BOOL isRowSelected = [indexPath isEqaul:[tableView indexPathForSelectedRow]]; 
    if (isRowSelected) { 
     cell.cam.highlightedImage = [UIImage imageNamed:@"cam_selected"]; 
    } else { 
     cell.cam.hightlightedImage = [UIImage imageNamed:@"cam_unselected"]; 
    } 
} 

Две вещи, которые я замечаю здесь. Сначала вы никогда не используете true или TRUE в Objective-C. Вы используете BOOL с YES и NO. Во-вторых, вам редко нужно использовать dequeReusableCellWithIdentifier: снаружи tableView:cellForRowAtIndexPath:. Почему ты это сделал?