Я хочу настроить свой 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, и я обнаружил, что при щелчке по второй ячейке отображается изображение, но я все еще не вижу первое изображение в первой ячейке, есть ли какая-то связь?

0
Wei Du 8 Июл 2016 в 19:08

2 ответа

Лучший ответ

Чтобы удалить разделительную линию, используйте tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

-1
Angel 8 Июл 2016 в 19:19
Я не хочу снимать разделитель, на самом деле это то, что я хочу. Проблема в том, что изображение не появляется.
 – 
Wei Du
8 Июл 2016 в 19:27
Проблема заключается в этой строке IntroductViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Introductioncell" forIndexPath: indexPath]; попробуйте изменить его на IntroductViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Introductioncell"];
 – 
Angel
8 Июл 2016 в 20:11

Я вижу несколько возможных проблем с кодом, но не могу гарантировать, что это решит проблему без дополнительного контекста.

1) Вы используете - dequeueReusableCellWithIdentifier: forIndexPath: для чего требуется, чтобы вы вызвали registerNib: forCellReuseIdentifier: или registerClass: forCellReuseIdentifier: (первый, если вы используете построитель интерфейса, второй, если вы определили ячейку только в коде). Думаю, вам понадобится второй в вашем случае. Пример (это было бы уместно в viewDidLoad вашего TableViewController):

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

Извините, если мой Objective-C немного не работает, я использую Swift исключительно в течение последнего года или около того. Если у вас это уже было, но эта часть не вошла в этот вопрос, тогда ничего страшного.

2) Избавьтесь от этого бита:

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

Во-первых, вы, наверное, хотели! Cell там (или что-то в этом роде). Вероятно, вы не хотели отбрасывать уже существующую ячейку (вы хотели новую, если не было ни одной выделенной, верно? Не перераспределять, если получение ячейки было успешным). Во-вторых, он больше не нужен после того, как вы выполните команду registerClass / dequeueReusableCellWithIdentifier: forIndexPath: (в частности, последний метод всегда будет возвращать действительную ячейку).

0
Jaded Bucket 8 Июл 2016 в 20:42