2014-02-28 49 views
0

在我的UITableView中調用_selectAttributes時,我想在每次單元上點擊時刪除一個複選標記。 這是代碼:UITableView的單元格上的勾號

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell * cell = [_selectAttributes cellForRowAtIndexPath:indexPath]; 
    if (cell.accessoryType != UITableViewCellAccessoryCheckmark) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
} 

一切似乎運作良好,但是當我向上和向下滾動表,複選標記出現在其他細胞和消失在以前的。

我該如何解決?

預先感謝您。

+0

[UITableViewCellAccessory在滾動關閉屏幕時消失]的可能重複(http://stackoverflow.com/questions/5827034/uitableviewcellaccess-disappears-when-scrolled-off-screen) – rmaddy

回答

1

聲明名爲selectedIndexPathNSIndexPath屬性。

然後讓你的委託方法cellForRowAtIndexPathdidSelectRowAtIndexPath這樣的:

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

    if ([indexPath isEqual:self.selectedIndexPath]) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:self.selectedIndexPath]; 
    cell.accessoryType = UITableViewCellAccessoryNone; 

    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    self.selectedIndexPath = indexPath; 
} 

UPDATE: 我沒有付出,你要爲多個小區選擇解決方案的關注。我的回答顯然只能解決單個細胞選擇的問題,但我相信這是一個好的開始。

+0

我已經解決了適應您的解決方案與數組! – charles

1

我會創建一個選定索引路徑的NSArray。在tableView:didSelectRowAtIndexPath:上,將索引路徑添加到該數組,並在tableView:cellForRowAtIndexPath:中檢查索引路徑是否在數組中,並相應地設置UITableViewCell的附件類型。

+0

順便說一下,您看到的行爲是這是UITableView如何重複使用單元格的結果。表格視圖出於性能方面的原因,但它可以通過多種方式創建頭痛。如果你還不熟悉的話,我建議熟悉細胞再利用這個概念。 – geraldWilliam