0

我有一个 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;
}

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

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

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

4

5 回答 5

1

单元格只有一个 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"];
于 2012-08-19T10:10:03.577 回答
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. 将 的父类更改TableViewCellMyTableViewCell(在 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;

项目在这里

于 2012-08-19T19:40:22.233 回答
0

默认实现UITableViewCell一次不支持两个图像。您需要对要显示的图像之一进行子类化UITableViewCell并添加您自己的子类。UIImageView

于 2012-08-19T09:22:15.950 回答
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;
    }
于 2012-08-21T13:38:23.117 回答
-2

在表格视图单元格中添加两个图像视图。您必须在 cellForRowAtIndexPath 中实现以下代码(默认情况下只有一个图像视图)。在这种情况下,您必须获取两个子视图并将它们添加为内容视图。

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

}

于 2012-08-19T10:51:30.817 回答