在自定义uitableviewcell中更改图像

时间:2013-01-22 18:42:49

标签: ios objective-c uitableview

我有一个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.highlightedcell.selected无效。

任何想法都表示赞赏。

2 个答案:

答案 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];

}