保存 UITableviewcell accessoryView 的状态
Posted
技术标签:
【中文标题】保存 UITableviewcell accessoryView 的状态【英文标题】:saving the state of UITableviewcell accessoryView 【发布时间】:2012-04-24 19:37:21 【问题描述】:我的 UITableViewCell 中有一个复选框作为附件视图。当我单击复选框时,它会被选中,反之亦然。但是当我向下滚动出视图并向后滚动时,复选框消失了。 我想知道有哪些方法可以保存按钮的状态?
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = nil;
if([tableView isEqual:self.myTableView])
static NSString *TableViewIdentifier = @"MyCells";
cell = [tableView dequeueReusableCellWithIdentifier:TableViewIdentifier];
if(cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:TableViewIdentifier];
//configure the cell
checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect checkboxRect = CGRectMake(135, 150, 36, 36);
[checkbox setFrame:checkboxRect];
[checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateNormal];
[checkbox setImage:[UIImage imageNamed:@"selected@2x.png"] forState:UIControlStateSelected];
/*if (checkbox.state == UIControlStateNormal)
[checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateHighlighted];
else if(checkbox.state == UIControlStateSelected)
[checkbox setImage:[UIImage imageNamed:@"selected@2x.png"]forState:UIControlStateHighlighted];
*/
[checkbox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = checkbox;
NSString *group;
NSUInteger row = [indexPath row];
switch (indexPath.section)
case 0:
group = [suggestedPeople objectAtIndex:row];
cell.textLabel.text = group;
break;
case 1:
group = [aArray objectAtIndex:row];
cell.textLabel.text = group;
break;
case 2:
group = [bArray objectAtIndex:row];
cell.textLabel.text = group;
break;
case 3:
group = [cArray objectAtIndex:row];
cell.textLabel.text = group;
break;
case 4:
group = [dArray objectAtIndex:row];
cell.textLabel.text = group;
break;
case 5:
group = [eArray objectAtIndex:row];
cell.textLabel.text = group;
break;
return cell;
编辑:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
if(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect checkboxRect = CGRectMake(135, 150, 36, 36);
[checkbox setFrame:checkboxRect];
[checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateNormal];
[checkbox setImage:[UIImage imageNamed:@"selected@2x.png"] forState:UIControlStateSelected];
return self;
【问题讨论】:
这绝对不应该发生。你能发布一些代码吗?特别是你的 cellForRowAtIndexPath 函数。 【参考方案1】:感谢您发布代码。对,您的问题是您在 cellForRowAtIndexPath 方法中创建 UIButton 实例。这是不允许的(或者更确切地说,正如您所注意到的那样,会发生奇怪的事情)。您应该创建一个 TableViewCell 子类并在那里添加按钮,或者为表格单元格创建一个 XIB 并加载它。
查看这篇文章以获得一些帮助:
http://forums.macrumors.com/showthread.php?t=545061
【讨论】:
我有另一个类并将 UIbutton 放到它上面,请问将它添加到我的 ViewController 的语法是什么? 在 cellForRowAtIndex 路径中创建/添加单元格的子视图是可以的,但是给新的子视图一个标签,并且只有在 dequeue 返回 nil 时才这样做。如果你得到一个出队的单元格,那么这就是你已经构建的一个单元格,并且应该使用 viewWithTag: 找到子视图:,而不是创建。 啊..有趣!我不知道你能做到,谢谢@danh。以上是关于保存 UITableviewcell accessoryView 的状态的主要内容,如果未能解决你的问题,请参考以下文章
如何在uitableViewCell中保存UIButton的状态?
关闭视图控制器时在 UITableViewCell 中保存 UICollectionView 的选定状态