Как загрузить NIB внутри представления в другом NIB? - PullRequest
12 голосов
/ 07 апреля 2010

У меня есть два NIB

ParentViewController.xib
ChildViewController.xib

ParentViewController.xib содержит UIView и UIViewController. ChildViewController.xib содержит UIButton

Я хочу, чтобы ChildViewController.xib загружался в UIView ParentViewController.xib

Я сделал следующее:

  1. Создано @property для UIView в ParentViewController
  2. Владелец подключенного файла к UIView в ParentViewController
  3. Установите UIViewController в свойстве NIB Name для ParentViewController в ChildViewController в Интерфейсном Разработчике
  4. Установить свойство представления ChildViewController равным UIView в ParentViewController

Я надеялся, что это загрузит ChildViewController в мой UIView в ParentViewController, но не повезло.

Я получил следующее предупреждение, которое может быть виновником:

'View Controller (Child View)' has both its 'NIB Name' property set and its 'view' outlet connected. This configuration is not supported.

Я также добавил дополнительный код в viewDidLoad () ParentViewController:

- (void)viewDidLoad {
    [super viewDidLoad];
    ChildViewController *childViewController = [[ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil]; 
    childViewController.view = self.myView; 
}

Есть мысли о том, почему ChildViewController не загружается в UIView ParentViewController?

Ответы [ 2 ]

6 голосов
/ 07 апреля 2010

Попробуйте это

[self.myview addSubview: childViewController.view];

вместо

childViewController.view = self.myView; 
5 голосов
/ 19 июля 2011

Альтернативой является создание «встроенного» представления (!) В Nib, скажем, ChildView.xib, а затем создание его экземпляра в ParentViewController.xib (измените класс в инспекторе удостоверений).Нет необходимости программно [self.view addSubview:embeddedView] в методе -viewDidLoad родительского контроллера.

Я написал, как мы встраиваем перья пользовательского вида в другие перья в длинном посте блога.Суть переопределения -awakeAfterUsingCoder: в классе ChildView, заменившего объект, загруженный из "родительского" пера, на объект, загруженный из "дочернего" пера.

Обратите внимание, что наш подкласс пользовательских элементов управления UIView, а не UIViewController (см. Документы Apple на пользовательских контроллерах представления : «Не следует использовать несколько пользовательских контроллеров представления для управления различными частями одной и той же иерархии представления.»)

...