2013-02-17 78 views
7

我經常需要表視圖細胞設置爲我使用下面的代碼的初始選擇的狀態:選擇一個表格視圖細胞編程:selectRowAtIndexPath VS的setSelected

[self.tableView selectRowAtIndexPath:indexPath 
    animated:NO scrollPosition:UITableViewScrollPositionNone]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
[cell setSelected:YES]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 

我使用selectRowAtIndexPath:indexPathsetSelected:YES在同一時間,因爲我不完全理解哪種方法是以編程方式選擇單元格的首選方式。

我應該使用哪一個陳述,爲什麼?

回答

6

我相信你想使用的方法是selectRowAtIndexPath:animated:scrollPosition:。通常,您應該將單元狀態的管理留給表視圖。在選擇的情況下,它將存儲並維護一組選定的索引路徑,因此在重新使用不同的單元格後,正確的行將保持選中狀態。也沒有必要調用這兩種方法,它只是多餘的。

+0

謝謝@Nicky!在使用'selectRowAtIndexPath:animated:scrollPosition:'後,我會重新加載表格並根據單元格的選擇狀態('isSelected')在'cellForRowAtIndexPath'中設置複選標記? – AlexR 2013-02-17 11:54:42

+0

嗯,我通常在一個單獨的屬性中存儲帶勾號的項目,感覺更加明確。因此,在'tableView:didSelectRowAtIndexPath:'中,您執行以下操作:重新加載兩行,一行先選中標記,一位用戶單擊(沒有動畫),選擇單擊行(也沒有動畫),然後取消選擇動畫,一個很好的視覺效果。全部通過調用表視圖的方法來完成。 – Nicky 2013-02-17 12:02:23

+0

需要額外選擇,因爲細胞在重新加載後會丟失。你可以在那裏設置附件類型,沒有重新加載/選擇就可以,但是我不想複製單元配置邏輯的任何部分。誰知道,也許明天我會用花哨的自定義選項標記或其他瘋狂的東西:) – Nicky 2013-02-17 12:07:26