2013-04-07 89 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

相关问题