Iphone 如何在使用UITableViewCell缓存时向左侧的UITableView添加复选框?
我在尝试将复选框作为待办事项列表的一部分时遇到了不少麻烦。 我有一个UITableView,每个UITableViewCell都应该在左侧有自己的复选框 如果有人能告诉我如何做到这一点,我将不胜感激。我已经在这个网站上广泛地查看了这些问题,但仍然不知道如何实现这一点 滚动tableview时会出现问题。例如,如果我有20个待办事项,当我滚动时,将要选择的复选框将被取消选择,将要取消选择的复选框将以看似随机的方式被选中。一定是滚动的问题 当系统重用一个单元时,缓存和发生了什么?我是否正在抓取一个空单元格,其中只包含对空子视图的引用 如果tablecell#1的视图标记为10,那么tablecell#2的视图标记是否为10?或者在整个tableView中不重复标记?(我甚至不确定这是否是问题所在) 谢谢大家!Iphone 如何在使用UITableViewCell缓存时向左侧的UITableView添加复选框?,iphone,uitableview,caching,checkbox,scroll,Iphone,Uitableview,Caching,Checkbox,Scroll,我在尝试将复选框作为待办事项列表的一部分时遇到了不少麻烦。 我有一个UITableView,每个UITableViewCell都应该在左侧有自己的复选框 如果有人能告诉我如何做到这一点,我将不胜感激。我已经在这个网站上广泛地查看了这些问题,但仍然不知道如何实现这一点 滚动tableview时会出现问题。例如,如果我有20个待办事项,当我滚动时,将要选择的复选框将被取消选择,将要取消选择的复选框将以看似随机的方式被选中。一定是滚动的问题 当系统重用一个单元时,缓存和发生了什么?我是否正在抓取一个空
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
switch (selectedSegment) {
case Todos:{
static NSString *ToDoCellIdentifier = @"TodoTableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifierToDoCellIdentifier];
UITextView *taskTextView = nil;
UIButton *checkBox = nil;
UIImageView *highPriorityIcon = nil;
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:signoutTableViewCellIdentifier] autorelease];
checkBox = [[UIButton alloc]initWithFrame:CGRectMake(1, 1, 25, 25)];
checkBox.tag = indexPath.row;
UIImage *normalImage = [UIImage imageNamed: @"checkbox_unchecked@2x.png"];
UIImage *selectedImage = [UIImage imageNamed: @"checkbox_checked@2x.png"];
[checkBox setImage:normalImage forState:UIControlStateNormal];
[checkBox setImage:selectedImage forState:UIControlStateSelected];
[checkBox addTarget:self action:@selector(historyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:checkBox];
[checkBox release];
//cell.contentView.backgroundColor = [UIColor lightGrayColor];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
NSLog(@"creating a new cell");
}
if (!checkBox) {
checkBox = (UIButton*)[cell viewWithTag:indexPath.row];
}
}
if ([[self.tasksCheckedStates objectAtIndex:indexPath.row]boolValue]) {
checkBox.selected = YES;
}
else {
checkBox.selected = NO;
}
return cell;
break;
}
您需要执行以下操作:
- 将选中/未选中状态存储在后台数据模型中,而不仅仅作为单元格的属性。该单元被重用,因此您不能将该单元的属性用于持久性李>
- 在cellForRowAtIndexPath方法中,确保取消选中未选中项的指示器(无论您是如何实现的),以及选中已选中项的指示器。同样,这些单元格被重复使用,以便选中的单元格可以为未选中的项目退出队列李>
- 出列单元
- 如果没有返回任何单元格,则创建一个新单元格并执行基本的、不更改的配置
- 设置特定行的单元格
- 将选中/未选中状态存储在后台数据模型中,而不仅仅作为单元格的属性。该单元被重用,因此您不能将该单元的属性用于持久性李>
- 在cellForRowAtIndexPath方法中,确保取消选中未选中项的指示器(无论您是如何实现的),以及选中已选中项的指示器。同样,这些单元格被重复使用,以便选中的单元格可以为未选中的项目退出队列李>
- 出列单元
- 如果没有返回任何单元格,则创建一个新单元格并执行基本的、不更改的配置
- 设置特定行的单元格