2014-12-05 38 views
0

我在uiviewcontroller的childViewController中有一個uitableview。在那個uitableview裏面,我使用了自定義的uitableviewcell。在那個自定義的uitableviewcell中,我有最喜歡的複選框按鈕。點擊一個在自定義uitableviewcell中的uibutton在uitableview中選擇多個uibuttons

該uitableview包含約30條記錄,約10條記錄出現在可見屏幕上,然後滾動另一條10條,然後是另一條。

問題是,當我在第一行選擇一個uibutton,然後向下滾動uitableview時,我發現它也在第11行和第21行上被選中。我現在已經上了半天,但無法找到問題。請任何幫助。

這裏是cellForRowAtIndexPath代碼:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

ABCViewCell *cell = (ABCViewCell*)[tableView dequeueReusableCellWithIdentifier:@"ABCViewCell" forIndexPath:indexPath]; 
cell.delegate = self; 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
cell.layoutMargins = UIEdgeInsetsZero; 
cell.labelDesiredDate.text = [dateFormatter stringFromDate:[NSDate date]]; 
cell.labelJournaledDate.text = [dateFormatter stringFromDate:[NSDate date]]; 

return cell; } 

感謝, 阿卜杜勒

+1

請張貼代碼爲您的表視圖的的cellForRowAtIndexPath。聽起來你正在重複使用表格單元格(好),但沒有準備好重用它們。 – 2014-12-05 16:17:58

+0

感謝邁克,我已經添加cellForRowAtIndexPath代碼 – 2014-12-05 16:33:39

回答

1

你要記住,當你正在使用dequeueReusableCellWithIdentifier方法,你的細胞開始recicle繪製所有內容。所以你必須考慮一種清理你的數據的方法。

東西如下:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    ABCViewCell *cell = (ABCViewCell*)[tableView dequeueReusableCellWithIdentifier:@"ABCViewCell" forIndexPath:indexPath]; 
    if ([self shouldMyCellBeSelected]) { 
     [cell displayButtonSelected]; 
    } else { 
     [cell displayButtonUnselected]; 
    } 
    return cell; 
} 
  1. shouldMyCellBeSelected。你應該有一個功能來確定是否應該選擇給定位置的特定單元格。你可以通過選擇用戶單元格的 單獨的索引列表並比較當前待繪製單元來查看它是否在該列表上。
  2. displayButtonSelected/displayButtonUnselected。那麼你應該有一個功能來顯示你的單元格Selected和Unselected。這可以通過更改按鈕的圖像或激活/停用按鈕來實現。

希望幫助

相關問題