需要为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
更改selectRowAtindexPath
的image
从我的第一个答案你可以使用代码来select全部或多个单元格的tableView。