Pug*_*gal 3 iphone uitableview
我创建了三个按钮,并为正常状态和选定状态设置背景图像.单击按钮时,将一个图像更改为选定状态.但是当滚动表视图时,不保留所选图像(先前选择的单元格),这意味着它是正常状态.
我的代码是,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
likeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *likeSelectedImage = [UIImage imageNamed:@"like.png"];
//set image as background for button in the normal state
[likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal];
[likeBtn addTarget:self action:@selector(likeAction:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:likeBtn];
}
Run Code Online (Sandbox Code Playgroud)
我的按钮动作是,
-(void) likeAction : (id) sender
{
UIImage *likeSelectedImg = [UIImage imageNamed:@"like-selected.png"];
UIImage *likeImg = [UIImage imageNamed:@"like.png"];
if ([sender isSelected]) {
[sender setImage:likeImg forState:UIControlStateNormal];
[sender setSelected:NO];
}else {
[sender setImage:likeSelectedImg forState:UIControlStateSelected];
[sender setSelected:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,当我滚动表视图单元格时,不保留先前选择的图像状态.因为cellForRowAtIndex方法已经反复调用,当我滚动表时.所以它会自动设定"[likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal];".如何避免这个问题?那么请帮帮我吧?谢谢!
由于UITableView用于显示数据的设计模式,您看到了这一点.为了最大限度地减少资源使用,只保证当前屏幕上的表格单元格保留在内存中.当单元格在屏幕外滚动时,单元格对象将被回收用于新单元格出现在列表的另一端,从而失去其状态.
我假设你已经修改了你的代码,因为你正在返回一个单元格tableView: cellForRowAtIndexPath:但是在你发布的代码片段中没有任何其他地方引用该变量.这使得在添加按钮之前无法看到如何获取单元格.
关于你的代码如何工作的黑暗中的一点点刺激,但这里是你需要做什么来保持状态的高级概述.
likeAction确定按钮来自哪一行(可能在创建时将行号分配给按钮的标记属性)并更新NSArray中相应行的状态tableView: cellForRowAtIndexPath:通过使用从获取的NSArray为给定indexPath状态设置了正确的图像的按钮.| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |