在自定义 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.highlighted
或 cell.selected
无济于事。
感谢任何想法。
【问题讨论】:
你能把你的代码发布出来吗?由于重用机制,cell.isSelected 可能会出现一些令人讨厌的事情。另一种方法是将所选单元格的行存储为属性。 显示didSelectRowAtIndexPath
和didDeselectRowAtIndexPath
和cellForRowAtIndexPath
的完整代码
【参考方案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 的大小