检查iPhone UITableView中的所有项目

时间:2010-07-13 18:51:45

标签: iphone uitableview

我有一个UITableView,其中每个单元格获取/丢失一个复选框或单击时转到另一个表格视图。对于每个表,我想添加一个check all按钮,用于检查该表中的每个单元格以及其中的所有单元格。如何允许一个UITableViewCell切换其TableView中每个的复选框?

编辑:删除索引路径中的最后一个索引,并将其替换为新的行号,我可以浏览整个表并将其检查出来,如下所示:

for(int i = 0; i < [tableView numberOfRowsInSection:0]; i++){
                UITableViewCell *newCell = [tableView cellForRowAtIndexPath:[[indexPath indexPathByRemovingLastIndex]
                                                                             indexPathByAddingIndex: i]];
                newCell.accessoryType = UITableViewCellAccessoryNone;
            }

奇怪的是,它每跳过十分左右的细胞 - 它甚至都不一致。对于年份列表,有时它不会检查2003年和1993年,有时是2003年和1991年,等等。它总是在每十个细胞左右,但我找不到模式。

1 个答案:

答案 0 :(得分:1)

当您单击单元格时,将调用didSelectRowAtIndexPath,此时您要做的就是使用tableView cellForRowAtIndexPath:indexPath方法逐个取回所有单元格并将其附件类型设置为选中标记...希望这样帮助

编辑:另一种方法是,如果你有某种类型的数组(很难在不查看代码的情况下告诉你该做什么),但是如果你有一些数组可以保存关于哪些单元需要的值在它们上面有复选标记,然后你可以在cellForRowAtIndexPath中使用复选标记附件,所以当你的单元被选中时,你可以将数组中的所有值设置为你需要的值,只需调用UITableViews reloadData ...希望这使得sence :),继承了一些代码,试图让它更清晰 假设您有1个部分和x个行

       NSMutableArray shouldHaveCheckmark; //this array will be of size x 
//(one for each row) and hold NSNUmbers 0 means not checked 1 means checked you initialize 
//this somewhere (viewDidLoad maybe) and should be declared in your .h file 
    //this is cellForRowAtIndex path
    -(UITableViewCell)cellForRowAtIndexPath:(NSIndexPath*)path
    {
        UITableViewCell *cell=...
        if([[shouldHaveCheckmark objectAtIndex:path.row] boolValue] )
           //assign checkmark accesory
    //other code 
     return cell;
    }

所以你可以在didSelectRowAtIndexPath中看到你只需翻转数组中的数字并在tableView上调用reloadData ......这种方法也可以正常工作