Я хочу настроить свой 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, и я обнаружил, что при щелчке по второй ячейке отображается изображение, но я все еще не вижу первое изображение в первой ячейке, есть ли какая-то связь?
2 ответа
Чтобы удалить разделительную линию, используйте tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
Я вижу несколько возможных проблем с кодом, но не могу гарантировать, что это решит проблему без дополнительного контекста.
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: (в частности, последний метод всегда будет возвращать действительную ячейку).
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.