在tableView的单元格中切换2个不同的图像

时间:2012-08-19 09:17:57

标签: objective-c ios cocoa-touch uitableview

我有一个tableView,用于检查是否已打开一个单元格:如果是,则显示一个空单元格(无图像),如果不是,则显示一个小图像,表明该单元格尚未被读取(打开)

现在,我的应用程序中有“收藏夹”功能,我想在tableView中显示一个小图像,表明该单元格是最受欢迎的,因此用户可以快速识别那些添加到收藏夹中的图像。

我试图用cellForRowAtIndexPath方法

NSDictionary *item = [rows objectAtIndex:indexPath.row];
cell.textLabel.text = [item objectForKey:@"name"];
if ([[item valueForKey:@"isRead"] boolValue] == NO) {
    cell.imageView.image = [UIImage imageNamed:@"unread.png"];
} else {
      if ([[item valueForKey:@"isFav"] boolValue] == YES){
          cell.imageView.image = [UIImage imageNamed:@"favorite.png"];
      }
      else{
          cell.imageView.image = nil;
      }
    cell.imageView.image = nil;
}

其中nameisReadisFav是从存储所有数据的plist获取的值。 当然,当用户打开一个单元格时,“未读”的图像就会消失。

问题是现在我想要显示未读和收藏。在上面的代码中,它只显示那些未读的。

我该怎么做才能做到这一点?我可能错过了一些愚蠢的东西!

5 个答案:

答案 0 :(得分:1)

Cell只有一个imageView。 试试这个

if (cell == nil) 
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    UIImageView *imageView1=[[UIImageView alloc]init];
    imageView1.frame=CGRectMake(0, 0,50,cell.frame.size.height);
    imageView1.tag=1000;
    [cell.contentView addSubview:imageView1];

    UIImageView *imageView2=[[UIImageView alloc]init];
    imageView2.frame=CGRectMake(cell.frame.size.width-50, 0, 50,cell.frame.size.height);
    imageView2.tag=2000;
    [cell.contentView addSubview:imageView2];


}


UIImageView *imageView=(UIImageView *)[cell.contentView viewWithTag:1000];
imageView.backgroundColor=[UIColor redColor];
imageView.image=[UIImage imageNamed:@"unread.png"];

UIImageView *imageView2=(UIImageView *)[cell.contentView viewWithTag:2000];
imageView2.backgroundColor=[UIColor greenColor];
imageView2.image=[UIImage imageNamed:@"favorite"];

答案 1 :(得分:1)

为什么不仅仅是UITableViewCell的子类并按照您想要的方式进行布局?这很容易做到。我做了一个项目,展示了如何做到这一点。

简要总结:

创建一个名为MyTableViewCell或其他的新类。

MyTableViewCell.h:

#import <UIKit/UIKit.h>

@interface MyTableViewCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UIImageView *image1;
@property (nonatomic, strong) IBOutlet UIImageView *image2;
@end

MyTableViewCell.m:

#import "MyTableViewCell.h"

@implementation MyTableViewCell
@synthesize image1, image2;
@end

在包含TableView的VC中导入该类。将TableViewCell的父类更改为MyTableViewCell(在Interface Builder中)。确保重用标识符已正确命名,然后在cellForRowAtIndexPath

static NSString *CellIdentifier = @"TwoImageCell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

[cell.image1 setImage:[UIImage imageNamed:@"lion.png"]];
[cell.image2 setImage:[UIImage imageNamed:@"mtlion.png"]];

// Configure the cell...

return cell;

Project Here

答案 2 :(得分:0)

默认实现UITableViewCell一次不支持两个图像。您需要为UITableViewCell创建子类,并为要显示的图像之一添加自己的UIImageView

答案 3 :(得分:0)

感谢亲朋好友的帮助,我最终做了像

这样的事情
int state = 0;
    if ([[item valueForKey:@"isRead"] boolValue] == NO)
        state += 1;
    if ([[item valueForKey:@"isFav"] boolValue] == YES)
        state += 2;

    switch (state){
    case 1:
        cell.imageView.image = [UIImage imageNamed:@"unread.png"];
    break;
    case 2:
        cell.imageView.image = [UIImage imageNamed:@"favorite.png"];
    break;
    case 3:
        cell.imageView.image = [UIImage imageNamed:@"unreadAndFavorite.png"];
    break;
    default:
            cell.imageView.image = nil;
    break;
    }

答案 4 :(得分:-2)

在tableview单元格中添加两个图像视图。你必须在cellForRowAtIndexPath中实现下面的代码(默认情况下,ow有一个图像视图)。在此,您必须采用两个子视图并将其添加为内容视图。

-(UITableViewCell *)tableView:(UITableView *)tableViewL cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";


UITableViewCell *cell = [tableViewL dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    UIImageView *imageView1=[[UIImageView alloc]init];
    imageView1.frame=CGRectMake(0, 0,50,cell.frame.size.height);
    imageView1.tag=1000;
    [cell.contentView addSubview:imageView1];

    UIImageView *imageView2=[[UIImageView alloc]init];
    imageView2.frame=CGRectMake(cell.frame.size.width-50, 0, 50,cell.frame.size.height);
    imageView2.tag=2000;
    [cell.contentView addSubview:imageView2];


}


UIImageView *imageView=(UIImageView *)[cell.contentView viewWithTag:1000];
imageView.image=[UIImage imageNamed:@"myImage1.png"];

UIImageView *imageView2=(UIImageView *)[cell.contentView viewWithTag:2000];
imageView2.image=[UIImage imageNamed:@"myImage2.png"];   

 return cell;

}