Добавьте subview (созданный в xib) в UIView

У меня есть UIView, который содержит 3 других подсмотра. В начале я не добавляю эти 3 subviews в UIView, вместо этого я создал их отдельно следующим образом:

Я хочу добавить subview динамически. Поэтому я пробую этот код следующим образом:

Добавить MainView в UIViewController

UINib *nib = [UINib nibWithNibName:@"MainView" bundle:nil];
MainView* mainView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[self.view addSubview:mainView];

Пока все в порядке. Но теперь, в классе MainView, я добавляю subView, я получил сбой

UINib *nib = [UINib nibWithNibName:@"SubView1" bundle:nil];
SubView1* subView1 = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[self addSubview:subView1];

Что случилось с моим кодом?

2 ответа

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

UIView *mainView=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:0];
[[self view] addSubview:mainView];

Точно так же

UIView *subView1=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:1];
[mainView addSubview:subView1];

UIView *subView2=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:2];
[mainView addSubview:subView2];

UIView *subView3=[[[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil] objectAtIndex:3];
[mainView addSubview:subView3];

Я уверен, что это будет вызывающе работать


Мне кажется, что вы добавили все подпрограммы в один и тот же файл (или xib). Следовательно, нет ниба с именем "SubView1".

Чтобы решить эту проблему, добавьте отдельный файл xib для каждого представления:

Файл → Новый → Файл... → Пользовательский интерфейс → Просмотр

и соответствующим образом назовите эти файлы или сохраните ссылки на свои представления в классе контроллера вида. Вы можете сделать это, создав выходные точки. Или вы можете назначить тег для каждого представления и получить ссылку на это конкретное представление с UIView метода -viewWithTag:

Тем не менее, я бы рекомендовал использовать метод @Manthan, предложенный в его комментарии, если это возможно: добавьте все подпрограммы в ваш mainView в построителе интерфейса и установите для их hidden свойства значение YES. Затем, когда вы хотите, чтобы эти представления отображались, используйте [yourView setHidden:NO]; в вашем коде.

Если это не сработает для вас, я предлагаю вам использовать первый метод с отдельными xib файлами.

licensed under cc by-sa 3.0 with attribution.