0

我想自定义我的 TableViewCell,它只填充一张图像。我试图调整单元格和我的图像视图的框架,但是当我运行这个程序时,我在屏幕上看不到我的图像。

这是我关于客户单元的代码:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        [self initLayout];
   }

   return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)initLayout {
    self.imageView.frame = self.contentView.frame;

    [self addSubview:_image];
}

- (void)resizeWithWidth:(NSInteger)width {
    // I want the picture's width equal to the screen's, and the picture's height is 1/3 of its width
    CGRect frame = [self frame];
    frame.size.width = width;
    frame.size.height = width / 3;
    self.frame = frame;
    self.imageView.frame = frame;
}

在我的 TableViewController 中,我以这种方式获取单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   IntroductViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"introductcell" forIndexPath:indexPath];

   // Configure the cell...
   if (cell) {
       cell = [[IntroductViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"introductcell"];
   }


   cell.imageView.contentMode = UIViewContentModeScaleAspectFill;

   if (indexPath.row == 0) {
       cell.imageView.image = [UIImage imageNamed:@"1.jpeg"];
   } else if (indexPath.row == 1) {
       cell.imageView.image = [UIImage imageNamed:@"2.jpeg"];
   }

   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   [cell resizeWithWidth:[UIScreen mainScreen].bounds.size.width];

   return cell;
}

而且,这是我在运行程序时看到的:

运行图像

PS:我注意到每个单元格都有一些空间。我怎样才能删除它们?

PS 2:我试图删除该行: cell.selectionStyle = UITableViewCellSelectionStyleNone; 在cellForIndex中,我发现点击第二个单元格时,它显示了图像,但我仍然看不到第一个单元格中的第一个图像,有什么关系吗?

4

2 回答 2

0

我看到代码有几个可能的问题,但我不能保证在没有更多上下文的情况下这会解决问题。

1)您正在使用 - dequeueReusableCellWithIdentifier:forIndexPath: 这要求您调用了 registerNib:forCellReuseIdentifier: 或 registerClass:forCellReuseIdentifier: (如果您使用的是接口构建器,则为第一个,如果您仅在代码中定义了单元格,则为第二个)。我猜你需要第二个。示例(这在您的 TableViewController 的 viewDidLoad 中是合适的):

[tableView registerClass: [IntroductViewCell class] forCellReuseIdentifier: @"introductcell"];

抱歉,如果我的 Objective-C 有点偏离,我在过去一年左右一直在专门使用 Swift。如果你已经有了这个,但把那部分排除在这个问题之外,那很好。

2)摆脱这个位:

   if (cell) {
       cell = [[IntroductViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"introductcell"];
   }

首先,您可能想要 !cell 那里(或类似的东西)。您可能不想废弃已经存在的单元格(如果没有分配,您想要一个新的单元格,对吗?如果单元格检索成功,则不要重新分配)。其次,一旦您执行了 registerClass / dequeueReusableCellWithIdentifier:forIndexPath: 组合,就不再需要它(特别是,后一种方法将始终返回一个有效的单元格)。

于 2016-07-08T17:42:08.650 回答
-1

删除分隔线使用 tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

于 2016-07-08T16:19:05.107 回答