Если я ясно понимаю вопрос:
- У вас есть родительское представление и контроллер, исходящий из XIB.
- Вы поместили подпредставления в родительское представление.
- Вы хотите, чтобы каждое подпредставление, помещенное в родительское представление, имело собственный (пользовательский) контроллер, но вы не знаете, как добавить контроллеры представления в вашу иерархию (XCode не позволит вам перетаскивать контроллеры представления на холст представления).
Итак, чтобы ответить на вопрос кратко: предположим, у вас есть несколько пользовательских UIViewController в вашем проекте (каждый контроллер представления состоит из .h и .m).Помните, что если вы размещаете их в контексте родителя, у них не должно быть своих собственных XIB (вы не можете вкладывать XIB в IB).Здесь важно отметить, что вы должны «размещать» интерфейс только в одном месте.Если вы хотите иметь XIB для каждого подпредставления, это неправильный подход.Однако то, что вы можете (не должен) делать, - это иметь несколько пользовательских viewControllers, каждый из которых подключен к своему собственному представлению, расположенному внутри вашего parentView, и вы можете настроить выходы вашего контроллера подчиненного представления на объекты в этомparentView.Фу, немного грязно.Еще одна вещь, о которой вам нужно знать, это то, что вашему родительскому контроллеру представления потребуется ссылка на каждый из его контроллеров подчиненного представления, чтобы вы могли программно получать доступ к этим подчиненным контроллерам и их выходам, поэтому для каждого подчиненного контроллераКонтроллер представления, который вы добавляете, вам также необходимо добавить IBOutlet в родительский контроллер представления, указывающий на каждый subviewController:
ParentViewController.h
@property (nonatomic, weak) IBOutlet CustomUIViewController *firstCustomController;
И затем, например, установить цвет фона для представления вашего первого пользовательского подпредставления /контроллер:
ParentViewController.m
[[[self firstCustomController] view] setBackgroundColor:[UIColor whiteColor]];
Откройте свой родительский контроллер представления в IB.Если вы посмотрите в своем ящике доступных объектов, вы найдете универсальный объект UIViewController.Перетащите это в свой родительский контроллер представления (НЕ на его холст представлений, а в сам родительский объект UIViewController, как видно в левом столбце компоновщика IB).Выберите универсальный контроллер представления, который вы добавили, и установите для его класса желаемый подкласс UIViewController.Теперь, когда ваша XIB загружается, он будет создавать экземпляр вашего пользовательского контроллера представления вместе со всем, что вы добавили к его холсту.
Наконец, перетащите универсальный UIView на ваш холст, поместив его в существующий контроллер.просмотреть (ваш скриншот уже показывает это как сделано).Щелкните правой кнопкой мыши по своему пользовательскому контроллеру представления и подключите его выход «view» к добавленному представлению.
Теперь, когда вы запускаете, ваш пользовательский контроллер представления имеет на экране вид, который равен представлению вашего пользовательского подкласса контроллера, и вы не делали ничего из этого в коде.
Итак, теперь, когда вы это сделали, подумайте, будет ли это лучшим выбором: встроенные контроллеры представления сложны (как вы видели) и не обязательно являются хорошим дизайнерским решением:http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
Хотя iOS5 поддерживает вложенные контроллеры представления, лично я бы не стал их использовать.Я ценю лучшую практику, диктующую один экран = один контроллер представления.