2016-02-01 4 views
0

У меня есть UITableViewCell с imageview, который действует как «checkbox», где при нажатии, он будет check или uncheck. У меня есть метод для этого в моей UITableViewCellне setImage работает на UITableViewCell

-(void) toggleCheck { 
    if(checked) { 
     checked = NO; 
     [self.imageView setImage:[UIImage imageNamed: @"empty-check.png"]]; 
    } else { 
     checked = YES; 
    [self.imageView setImage:[UIImage imageNamed: @"check.png"]]; 
    } 
} 

, а затем в моем ViewController, я делаю это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     CheckCell *cell = (CheckCell *)[tableView dequeueReusableCellWithIdentifier:@"CheckCell"]; 
     if (cell == nil) { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CheckCell" owner:self options:nil]; 
      cell = [nib objectAtIndex:0]; 
     } 

     [cell toggleCheck]; // check the box 
    } 
} 

Но UIImageView изображение не меняется. Я также пробовал делать [tableView reloadData] без везения

Любые идеи о том, почему это не обновляется?

+0

Почему вы изменяете 'checked' внутри метода' toggleCheck'? – rmaddy

+0

Проверено является BOOL, чтобы отслеживать, проверен ли t или нет. – user1282637

+0

Где определяется изображение? Не следует ли добавлять его в ячейку вместо себя? –

ответ

0

Вы не должны создать новую ячейку в didSelectRowAtIndexPath методе.
Создание новой ячейки в методе бесполезно.
вы можете получить выбранную ячейку с помощью [yourtable cellForRowAtIndexPath:indexPath];
рассмотреть этот код, например

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     CheckCell *cell = (CheckCell *)[tableView cellForRowAtIndexPath:indexPath]; 
     [cell toggleCheck]; // check the box 
    } 
} 
0

Просто попробуйте сделать это так ... потому что изображение не может быть установлено как получать у получают доступ к cell.imageView вне метода делегата

также я не уверен, будут ли у доступа правильного изображения. Если вы используете self.imageView, вам нужно сначала объявить imageView как a @property. , и это будет давать проблемы u, так как u повторно использует ячейки таблицы, когда число строк в таблице увеличивается.

Кроме написания отдельной функции переключения не надо вот так и можно пропустить его и записать его в didSelect методы

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
      CheckCell *cell = (CheckCell *)[tableView dequeueReusableCellWithIdentifier:@"CheckCell"]; 
     if (cell == nil) 
     { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CheckCell" owner:self options:nil]; 
      cell = [nib objectAtIndex:0]; 
     } 
     if(checked) 
     { 
      checked = NO; 
      [cell.imageView setImage:[UIImage imageNamed: @"empty-check.png"]]; 
     } 
     else 
     { 
      checked = YES; 
      [cell.imageView setImage:[UIImage imageNamed: @"check.png"]]; 
     } 
    } 
0

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

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