需要为UITableView创build一个全选button,并将select添加到iOS中的数组

我有一个UITableViewController,它显示了NSMutableArray中的项目列表,以及一个用作用户可以select/取消select的checkbox的button。 我能够成功显示表格以及checkbox。 不过,我希望在表格的最顶端有一个tableheader,它会有一个“全选”checkbox,允许用户select所有的单元格,或者取消选中所有的单元格。 如果某些单元格已经被选中,那么我只需要那些未被选中的单元格。

这是我迄今为止的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; testButton = [UIButton buttonWithType:UIButtonTypeCustom]; [testButton setFrame:CGRectMake(280, 57, 25, 25)]; [testButton setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateSelected]; [testButton setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal]; [testButton setUserInteractionEnabled:YES]; [testButton addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside]; [cell setAccessoryView:testButton]; } // Configure the cell... TestObject *tObject = [[DataModel sharedInstance].testList objectAtIndex:indexPath.row]; cell.textLabel.text = tObject.testTitle; return cell; } -(void)buttonTouched:(id)sender { UIButton *btn = (UIButton *)sender; if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"CheckBox1.png"]]) { [btn setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal]; // other statements } else { [btn setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateNormal]; // other statements } } //Here is the additional method that I have added to my code to select all -(void)clickOnCheckButton { NSLog(@"Did it select?"); for (int i = 0; i < [self.tableView numberOfSections]; i++) { for (int j = 0; j < [self.tableView numberOfRowsInSection:i]; j++) { NSUInteger ints[2] = {i,j}; NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; //Here is your code [self buttonTouched:nil]; } } } 

有没有人有任何build议如何做到这一点?

在此先感谢所有回复的人。

把另一个NSMUtableArray作为SelectedArray

didselectRowAtIndexPath行中您可以从SelectedArray添加删除对象。

您可以select一个单元selectRowAtIndexPath表视图的selectRowAtIndexPath方法:

 [yourtable selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop]; 

selectedArray for loop放在只在选中的单元格中。

在你的CellForRow方法中使用这个

 testButton.tag=indexpath.row; 

您可以通过下面的方法select所有行和所有部分。

 for (int i = 0; i < [ptableView numberOfSections]; i++) { for (int j = 0; j < [ptableView numberOfRowsInSection:i]; j++) { NSUInteger ints[2] = {i,j}; NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2]; UITableViewCell *cell = [ptableView cellForRowAtIndexPath:indexPath]; //Here is your code UiButton *btn = (UiButton*)[cell.contentView viewWithTag:j] if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"CheckBox1.png"]]) { [btn setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal]; // other statements } else { [btn setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateNormal]; // other statements } } } 

如果你想在UITableView头中使用下面的方法:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

从这个方法返回UIView对象,其中包含checkbox,你还想要什么。

要检查取消选中维护一个数组,您可以存储checkbox是否被选中。

当用户检查/取消选中标题更改数组并重新加载表时。

这里即时发布另一个答案,以便它可能会帮助其他谁想要从头开始,并删除任何混乱。

而不是添加button到tableViewCell ,您可以使用ImageView作为AccessoryView。

 UIImageView *imageView1 = [[[UIImageView alloc] init] autorelease]; imageView1.tag = indexpath.row; [cell.accessoryView addSubview:imageView1]; 

后来得到子视图使用 – viewWithTag :方法:

 UIImageView *getImageView1 = (UIImageView*)[cell.accessoryView viewWithTag:rowNumber]; getImageView1.image=[UIImage ImageNamed:@"checked.png"]; 

通过上面的代码,我们可以在selectRowAtindexPath更改selectRowAtindexPathimage

从我的第一个答案你可以使用代码来select全部或多个单元格的tableView。