2012-06-01 41 views
0

我在自定義UITableViewCell中的複選框有問題。 當我觸摸複選框時,圖像會更改(「checked.png」 - >「unchecked.png」和「unchacked.png」 - >「checked.png」),並將值保存在數據庫(SQLLite)中。 問題是,如果我在視圖中輸入一個複選框「cheked」,然後觸摸它,圖像不會改變,但如果我重新加載視圖,則圖像是正確的! 如何在「press-checkbox」事件中自動重新加載視圖? 這裏我的代碼:目標c複選框不刷新

// 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]; 
} 

謝謝你vey多任何建議!

斯特凡諾

+0

您正在使用self.checked,但不是self.checkButton? –

+0

對不起,我還沒有指定...我有一個屬性名爲cheked我的課單元格:@synthesize checked,title; –

+0

添加一個'NSLog(@「checked%d按鈕%@」,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後,您需要重新載入您的整個表格(不必要的)或簡單地複選框的表格行。

我猜你的下一個問題是,我怎麼知道複選框在哪一行?那麼,這裏有一個簡單但容易實現的技巧。 在每個複選框中添加一個具有該行值的Tag值(這是一個整數值)。

然後得到由單元格引用:

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

現在,這將工作確定,如果你只有1節。如果你有多個部分,那麼需要更多的調整來獲取表格部分。