选择单元格时更改图像

Posted

技术标签:

【中文标题】选择单元格时更改图像【英文标题】:Change image when a cell is selected 【发布时间】:2012-08-14 10:50:09 【问题描述】:

在我的应用程序中,我在左侧有一个 UITableView 作为菜单。当我按下表格的一个单元格时,右侧的视图会发生变化。 我的“菜单”表有自定义单元格,我想在选中此单元格时更改单元格的图像。我该怎么做?

代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *cellIdentifier = @"MenuCell";
    CRMMenuCell *cell = (CRMMenuCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell)

        NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CRMMenuCell" owner:nil options:nil];

        for (id currentObjetc in topLevelObjects)

            if ([currentObjetc isKindOfClass:[CRMMenuCell class]])

                cell = (CRMMenuCell *)currentObjetc;
                break;
            

        

    



    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    if (indexPath.row == 0)
    
        cell.labelMenu.text = NSLocalizedString(@"calendarioKey", @"");
        cell.imagenMenu.image = [UIImage imageNamed:@"calendario_gris"];

    





- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


    static NSString *cellIdentifier = @"MenuCell";
    CRMMenuCell *cell = (CRMMenuCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];


    if (!cell)

        NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CRMMenuCell" owner:nil options:nil];

        for (id currentObjetc in topLevelObjects)

            if ([currentObjetc isKindOfClass:[CRMMenuCell class]])

                cell = (CRMMenuCell *)currentObjetc;
                break;
            

        

    


    if (indexPath.row == 0) 
    

        cell.imagenMenu.image = [UIImage imageNamed:@"calendario_rojo"];


    

谢谢。

【问题讨论】:

【参考方案1】:

你可以这样做

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

您的 TableView 的代表。

如何更改图像取决于您的实现,但应该类似于:

CRMMenuCell *cell = (CRMMenuCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.myImage = newImage;

编辑: 请尝试以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

   CRMMenuCell *cell = (CRMMenuCell*)[tableView cellForRowAtIndexPath:indexPath];
   cell.imagenMenu.image = [UIImage imageNamed:@"calendario_gris"];

【讨论】:

抱歉,我找不到解决方案,我已经编辑了问题。 是的,但问题是我的单元格是自定义单元格,而我的属性(图像、标签等)不在正常的 UITableCellView 中。 编辑了我的答案。如果您使用不同的单元格,您可能必须在转换和更改图像之前验证 indexPath 当单元格不再突出显示时,如何将图像改回? Chris,尝试与 didSelectRowAtIndexPath 方法相反的方法,即 didDeselectRowAtIndexPath。

以上是关于选择单元格时更改图像的主要内容,如果未能解决你的问题,请参考以下文章

在uitableview中选择时如何更改自定义单元格图像和标签字体颜色?

UITableView 选择单元格时所有组件都更改了背景颜色

点击 tableview 单元格时如何更改 UIImage 颜色?

为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?

单击单元格时列表视图更改图标

选择单元格时,图像视图消失但 UILabel 消失