2010-09-20 30 views
1

我只知道第一步是检查一行。 接下来,我觉得是用NSMutableArray记录哪一行被选中, ,这是我的代码:iphone SDK:如何使用复选标记删除行被检查?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     if ([[tableView cellForRowAtIndexPath:indexPath] accessoryType] == UITableViewCellAccessoryCheckmark){ 

       [[tableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryNone]; 
      } 

      else { 

       [[tableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark]; 

     } 
    } 

所以,我的问题是:

  1. 如何把这个检查行的indexPath成阵列?

  2. 如何添加一个删除按钮,我可以删除我选择的所有行?

回答

2

首先在viewController的.h文件中声明一个NSMutableArray。

像这样:

NSMutableArray *checkedRows; 

变化的youre didSelectRow方法是这样的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([checkedRows containsObject:indexPath]) { 
     [checkedRows removeObject:indexPath]; 
    } 
    else { 
     [checkedRows addObject:indexpath]; 
    } 
    [self.tableView beginUpdates]; //Just for animation.. 
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView endUpdates]; 
} 

而且在您选择cellForRow方法补充一点:

if ([checkedRows containsObject:indexPath]){ 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+0

谢谢我现在就试试这个方法! – 2010-09-20 12:52:11

+0

soory,我登录checkedRows时得到空... ...? – 2010-09-20 13:01:42

+0

对不起,我没有注意到问题的第二部分..这将只处理检查行.. checkedRows为null的原因很可能是因为你没有在viewDidLoad中分配它。像:checkedRows = [[NSMutableArray alloc] init ]。 也在dealloc中释放它[checkedRows release]; 做一些像TechZen recomended .. – LarsJK 2010-09-20 13:07:07

1

你要对这个错误的。

您不会自己处理编辑附件视图。相反,您将setEditing:animated:发送到表格,并为您更改单元格。那么你需要实现:

– tableView:commitEditingStyle:forRowAtIndexPath: 
– tableView:canEditRowAtIndexPath: 

...实际上删除行单元格。