在UIButton中,以下方法明确允许为不同的状态设置不同的图像:
// default is nil. should be same size if different for different states
- (void)setImage:(UIImage *)image forState:(UIControlState)state;
(1)UITableViewCell也可以做类似的事情吗?例如,通过将某些状态切换为true然后设置imageView?
// set selected state (title, image, background). default is NO. animated is NO
@property(nonatomic,getter=isSelected) BOOL selected;
// set highlighted state (title, image, background). default is NO. animated is NO
@property(nonatomic,getter=isHighlighted) BOOL highlighted;
(2)变化是否会持续存在或者单一的imageView会被覆盖吗?
(3)在表格单元格中模拟每个州的图像行为的最佳方法是什么?
答案 0 :(得分:0)
无需实施这些布尔值。 UITableViewCell具有“selected”属性,当用户选择单元格时,您可以将其设置为YES。
您的UITableViewDelegate回调 - tableView didSelectRowAtIndexPath应该用于设置单元格的图像(我这样做是通过将添加为子视图的UIImageView图像设置为单元格的contentView)如图所示:
[cell.contentView addSubview:yourImageView];
您可能希望跟踪设置为选定状态的最后一个单元格。这可以通过存储先前选择的单元格的NSIndexPath来完成。在didSelectRowForIndexPath中,首先读取此索引路径,抓取相应的单元格并将其图像设置为未选择的单元格。
我建议为此子类化UITableViewCell,以便您可以实现一个方法,该方法将UIImageView作为参数并将其设置为UIImageView设置为单元格的背景图像。
代码应该都是这样的:
子类UITableViewCell中的图像设置方法:
- (void)setCellBackgroundImage:(UIImage*)inImage
{
backgroundImageView.image = inImage;
}
请注意,'backgroundImageView是您将在子类UITableViewCell中使用的UIImageView ivar。设置单元格时,将此图像视图添加到单元格的contentView中,如前所示。
使用该方法设置单元格后,您的didSelectRowAtIndexPath方法应如下所示(请注意,oldSelectedCell的类型为NSIndexPath,其中包含旧选定单元格的索引路径):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *selectedImage = [UIImage imageNamed:@"path/to/your/selected/image.png"];
UIImage *deSelectedImage = [UIImage imageNamed:@"path/to/your/deselected/image.png"];
if(oldSelectedCell != nil)
{
//Assuming SubclassedCell is the name of your subclass of UITableViewCell
SubclassedCell *cell = (SubclassedCell*)[tableView cellForRowAtIndexPath:oldSelectedCell];
//Set the previously selected cell's image to be the deselected image
[cell setCellBackgroundImage:deSelectedImage];
//Set the cell to be deselected
cell.selected = NO;
}
//Set the current cell's image
SubclassedCell *cell = (SubclassedCell*)[tableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundImage:selectedImage];
cell.selected = YES;
//Save this cell's indexpath to be the previously selected cell for the next time this method is invoked
oldSelectedCell = indexPath;
//And you're done!
}
单元格的“selected”属性可用于在子类化单元格的layoutSubviews实现中设置它的视图。检查该属性的值并根据需要设置单元格。