2013-04-07 90 views
0

我有一個UITableView,每個單元格都有一個UITableViewCellAccessoryCheckmark。用戶可以根據自己的喜好檢查和取消選中單元格。用戶可以檢查/選擇tableview中的多個單元格。選中/選中的單元格可以取消選中,並根據用戶偏好重新檢查。這是我嘗試過的。UITableViewCellAccessoryCheckmark點擊單元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if([[NSIndexPath indexPathWithIndex:indexPath.row] isEqual:self.selectedIndex]){ 
        if(cell.accessoryType == UITableViewCellAccessoryCheckmark) 
         cell.accessoryType = UITableViewCellAccessoryNone; 
        else 
         cell.accessoryType = UITableViewCellAccessoryCheckmark; 
       } 
       else{ 
        if(cell.accessoryType == UITableViewCellAccessoryCheckmark){ 

        } 
        else{ 
         cell.accessoryType = UITableViewCellAccessoryNone;} 
       } 
} 

在這種情況下,我沒有得到正確的邏輯。以上是最接近的我來了,但同樣,第一次tableview加載每個單元格被檢查。但其餘的功能都可以。

所以我想要的是,最初當視圖加載時,我必須在UITableView未選中所有單元格。然後根據細胞的選擇,覈對標記必須在每個細胞中更新。酒店selectedIndexNSIndexPath類型,每次更新didSelectRowAtIndexpath

回答

2

永遠不要根據單元格中的任何數據檢查您選擇的狀態,始終擁有自己的數據模型或數組以維護選定的狀態。

呃,爲什麼? O_O

那麼通常UITableViewCell被再次使用時,電池出現在索引1可以用相同的狀態,在指數8或7或9或任何指數再次出現(我們不需要知道通常)當您使用dequeueReusableCell:

如果您想擁有CheckBox樣式(多選),您需要有一個數組來映射選定的索引。

如果您想擁有RadioButton風格(一次只能選擇一個),則需要具有引用所選索引的單個變量。

在從您的代碼你的具體情況。這可以解決這樣的:

if([[NSIndexPath indexPathWithIndex:indexPath.row] isEqual:self.selectedIndex]){ 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
else{ 
     cell.accessoryType = UITableViewCellAccessoryNone;} 
} 
+0

我想有一個複選框樣式選擇。您提供的代碼示例是radioButton種類的選擇 – 2013-04-07 16:26:20

+1

實際上,我從您的代碼中複製了該類型。如果你想擁有CheckBox風格,你需要一個數組來映射選定的索引。你可以看到我以前的答案有這種實現。 – 2013-04-07 16:37:37

相關問題