2012-06-01 6 views
0

У меня проблема с флажком в пользовательском UITableViewCell. Когда я касаюсь флажка, меняем изображение («checked.png» -> «unchecked.png» и «unchacked.png» -> «checked.png»), и значение сохраняется в БД (SQLLite). Проблема в том, что если я вхожу в представление, где есть флажок «cheked», и я касаюсь его, изображение не меняется, но если я перезагружу представление, изображение будет правильным! Как я могу перезагрузить просмотр автоматически в событии «нажмите-checkbox»? Вот мой код:Objective c checkbox not refreshing

// called when the checkmark button is touched 
- (void)checkAction:(id)sender 
{ 
    // note: we don't use 'sender' because this action method can be called separate from the button (i.e. from table selection) 
    self.checked = !self.checked; 
    UIImage *checkImage = (self.checked) ? [UIImage imageNamed:@"checked.png"] : [UIImage imageNamed:@"unchecked.png"]; 
    [checkButton setImage:checkImage forState:UIControlStateNormal]; 
} 

Спасибо Вея много для любого предложения !!

Стефано

+0

Вы используете self.checked, но не self.checkButton? –

+0

Извините, я не указал ... У меня есть свойство, названное cheked для моего класса. Cell: @synthesize checked, title; –

+0

Добавьте 'NSLog (@" checked% d button% @ ", self.checked, [checkButton description]);'. –

ответ

0

Попробуйте это:

- (void)checkAction:(id)sender 
{ 
    if(![sender isSelected]) 
    { 
    [sender setSelected:YES]; 
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
    //Save state in Database 

    } 
    else 
    { 
    [sender setSelected:NO]; 
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
    //Save state in Database 
    } 

    [YourTableView reloadData]; 

}

0

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

Итак, после перехвата checkAction вам нужно перезагрузить либо всю таблицу (необязательно), либо просто таблицу, содержащую этот флажок.

Я предполагаю, что ваш следующий вопрос: как узнать, в какой строке был установлен флажок? Ну, здесь идет простой, но простой в использовании трюк. В каждом из ваших флажков добавьте значение тега (это целочисленное значение), которое имеет значение строки.

Затем получите ссылку на ячейку с помощью:

- (void)checkAction:(id)sender 
{ 
    int tag= sender.tag; 
    NSIndexPath *cellIndexPath = [NSIndexPath indexPathForRow:tag inSection:0]; 
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:cellIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 

Теперь это будет работать нормально, если у вас есть только 1 раздел. Если у вас несколько разделов, для этого потребуется немного больше настроек для получения раздела таблицы.