Я внедрил компонент в файл XIB, чтобы я мог повторно использовать его в нескольких разных представлениях. Теперь в моем контроллере представления я загружаю UIView на основе XIB и добавляю его к текущему представлению через:
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
[self.view addSubview:_likePreview];
Сначала я подумал, что это не работает ... но на самом деле это работает, но только помещает корневой вид (то есть контейнер всех моих графических компонентов, который является прозрачным) для моего вида.
Поэтому мне нужно поместить такой код (для каждого подкомпонента), чтобы он работал:
[self.view addSubview:_likePreview];
NSArray *subviews = _likePreview.subviews;
for(UIView * subview in subviews) {
[self.view addSubview:subview];
}
Это очень нелогично, и, кроме того, я думаю, что это не создает иерархию представлений, которую я хотел бы.
Я уверен, что есть решение, потому что я сделал то же самое в UITableViewController, чтобы загрузить пользовательский заголовок таблицы из XIB. Использование точно такого же файла XIB в этой ситуации загружает все правильно. Вот код:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
switch(section) {
case 0: {
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
return _likePreview;
}
}
return [super tableView:tableView viewForHeaderInSection:section];
}
С приведенным выше кодом все в порядке, я получил все представление (= контейнер корневого представления со всем его содержимым) в качестве заголовка моего раздела таблицы.
Итак, вопрос: что я делаю неправильно в моем первом примере? Как я могу добавить весь контент (контейнер + весь контент) в мой родительский UIView как правильную иерархию UIView?
РЕДАКТИРОВАТЬ: мне нужно уточнить, что все организовано в моем файле XIB в одном корневом UIView следующим образом (я не могу опубликовать изображение):
* Thumbs preview view
|_ Button
|_ Image View
|_ Image View
|_ Image View
|_ Image View
|_ Button
|_ Button
|_ Button
|_ Label
Спасибо большое за помощь !
Кристоф