2016-03-15 4 views
0

У меня есть статическая ячейка, в которой хранится информационная форма, пользователь которой может вводить поля. Одна из статических ячеек предназначена для вложений. Я хотел бы добавить некоторый UIView в эту ячейку, когда пользователь выбрал изображение из UIImagePickerController. Я уже обработал часть UIImagePickerController. И я нашел клетку путем reuseIdentifier:Как добавить UIView в статическую ячейку в UITableViewController?

UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AttachmentCell"]; 

И я попытался добавить мнение в моей камере:

CGRect attachmentFrame = CGRectMake(0, 0, 50, 50); 

UIView * attachmentRow = [[UIView alloc]initWithFrame: attachmentFrame]; 

CGFloat ratio = 50/image.size.width; 

CGRect imageFrame = CGRectMake(10, 0, image.size.width * ratio, 50); 
CGRect imageNameLabelFrame = CGRectMake(10 + imageFrame.size.width + 10, 22, 300, 6); 

UIImageView *imageView = [[UIImageView alloc]initWithFrame: imageFrame]; 
imageView.image = image; 

UILabel *imageNameLabel = [[UILabel alloc]initWithFrame:imageNameLabelFrame]; 
imageNameLabel.text = [NSString stringWithFormat:@"Attachment %d", attachmentCounter++]; 

[attachmentRow addSubview: imageView]; 
[attachmentRow addSubview: imageNameLabel]; 

attachmentRow.backgroundColor = [UIColor lightGrayColor]; 

[cell.contentView addSubview: attachmentRow]; 

NSLog(@"Row appended"); 

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

+0

какая у вас высота в ряду? –

+0

Я установил его на 300 в своем раскадровке –

+0

Где вы создаете ячейку? – JomanJi

ответ

1

Может быть, это просто формулировка вопроса, но, похоже, что вы делаете после того, как пользователь выбрал изображение, это то, что вы создаете новую ячейку.

Эта линия:

UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AttachmentCell"]; 

Создает новую ячейку, и ваш вид таблицы не имеет возможности узнать об этом.

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Для того, чтобы перезагрузить данные, которые вы можете использовать либо reloadData метод UITableView, который будет перезагружать все данные или - (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *) withRowAnimation:(UITableViewRowAnimation)animation, которые будут перезагружать только ячейки по заданным индексам.

+0

Кажется, проблема перезагрузки. Большое спасибо. –

1

во-первых, добавьте эту строку

[cell.contentView addSubview: attachmentRow]; 

затем

[attachmentRow addSubview: imageView]; 
[attachmentRow addSubview: imageNameLabel]; 

может быть это поможет

+0

Я только что попытался добавить только строку вложения, и она не работает. –

+0

дать ширину рамки, чтобы она отображала вид .... –

+0

Но я установил фон в черный ... –

0

Вам придется использовать пользовательскую ячейку вместо использования ячейки tableview по умолчанию. Для этого сначала вам нужно создать один с идентификатором.

Смежные вопросы