我有一个tableview,它由包含imageview的自定义tableview单元格组成。在cellForRowAtIndexPath
中,我设置了每个单元格的图像。我希望在选择单元格时更改图像,因此在didSelectRowAtIndexPath
我得到单元格并更改图像,没有问题。但是,当我滚动表格(读取:表格重新加载单元格)时,新图像不再存在。此外,当不再选择单元格时,我希望图像切换回原始图像。
我尝试在cellForRowAtIndexPath
中执行以下操作:
if(cell.isSelected){
cell.imageview.image = [UIImage ImageNamed: @"selected.png"];
}
else
cell.imageview.image = [UIImage ImageNamed: @"not selected.png"];
我也尝试使用BOOL值cell.highlighted
或cell.selected
无效。
任何想法都表示赞赏。
答案 0 :(得分:2)
尝试使用selectedCellIndexPath
类型的类变量NSIndexPath
。在didSelectRow...
中设置了它的值,并在cellForRow...
中设置:
if([selectedCellIndexPath isEqual:indexPath]){
cell.imageview.image = [UIImage ImageNamed: @"selected.png"];
} else {
cell.imageview.image = [UIImage ImageNamed: @"not selected.png"];
}
修改强>
或者你可以写一下:
if([indexPath isEqual:[tableView indexPathForSelectedCell]]){
cell.imageview.image = [UIImage ImageNamed: @"selected.png"];
} else {
cell.imageview.image = [UIImage ImageNamed: @"not selected.png"];
}
但第一种解决方案效率更高。
答案 1 :(得分:0)
如果你有一个带有图像名称的数组,那么最容易更改数组中所选索引的名称并重新加载表格...像这样:
myImageArray = [[NSMutableArray alloc] init];
[myImageArray addObject:@"name1.jpg"];
[myImageArray addObject:@"name2.jpg"];
// etc..
在cellForRowAtIndexPath方法中:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
[cell.imageView setImage:[UIImage imageNamed:[myImageArray objecAtIndex:indexPath.row]]];
}
在didSelectRowAtIndexPath中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[myImageArray setObject:@"newName.jpg" atIndexedSubscript:indexPath.row];
[tableView reloadData];
}