在自定义 tableviewcell 中更改 UIImage

Posted

技术标签:

【中文标题】在自定义 tableviewcell 中更改 UIImage【英文标题】:Changing a UIImage in custom tableviewcell 【发布时间】:2013-01-22 18:42:48 【问题描述】:

我有一个表格视图,它由包含图像视图的自定义表格视图单元格组成。在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 无济于事。

感谢任何想法。

【问题讨论】:

你能把你的代码发布出来吗?由于重用机制,cell.isSelected 可能会出现一些令人讨厌的事情。另一种方法是将所选单元格的行存储为属性。 显示didSelectRowAtIndexPathdidDeselectRowAtIndexPathcellForRowAtIndexPath的完整代码 【参考方案1】:

尝试使用NSIndexPath 类型的类变量selectedCellIndexPath。在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"];

但第一个解决方案效率更高。

【讨论】:

谢谢你这样做了,我可以在 3 分钟内接受你的回答,并且会做【参考方案2】:

如果您有一个带有图像名称的数组,最简单的方法是更改​​数组中选定索引处的名称并重新加载表...像这样:

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


【讨论】:

以上是关于在自定义 tableviewcell 中更改 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 tableViewCell 中初始化 UiPickerView?

无法在自定义 TableViewCell 中编辑 UITextView

TapGestures 在自定义 TableViewCell 中不起作用

iOS:为啥在自定义 TableViewCell 中写入此文本字段的文本似乎不可读

我在自定义 TableViewCell 中有一个 UICollectionView,但我无法自动调整 CollectionView 的大小

在自定义tableviewcells中添加约束的最佳位置在哪里?