Подтвердить что ты не робот

Раскадровки и пользовательские контроллеры просмотра контейнеров

Я создаю пользовательский контейнерный вид в соответствии с apple spec. Я хотел бы использовать раскадровку для подключения трех статических дочерних UIViewControllers. Есть ли простой способ в раскадровке подключиться через Relationship, как видно для UINavigationController в раскадровке?

NavigationController 'relationship'

Основываясь на моих исследованиях, кажется, что это невозможно.

4b9b3361

Ответ 1

В нем IS можно связать контроллер контейнера с дочерним. На самом деле, это очень легко сделать. Вы открываете библиотеку объектов, введите "Контейнер" в поле поиска и найдите объект "Container view". Это выглядит так:

enter image description here

Перетащите представление контейнера в представление содержимого контроллера просмотра.

Затем вы управляете перетаскиванием из представления контейнера на другой контроллер представления, который вы хотите, чтобы представление контейнера принимало хост. IB настраивает для вас "встроенный сегмент". Встраивание segue вызывается при загрузке содержимого содержимого контроллера представления родительского представления. Встраивание segue устанавливает отношение родительского/дочернего представления к контроллеру и требует домашнего обслуживания. Это легко и безболезненно.

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

Взгляните на этот проект на github, который показывает, как использовать встроенные segues для включения 2 статических UITableViewControllers в родителях с использованием представлений контейнеров и встраивания segues. Этот проект устанавливает пользовательские протоколы для родительских и дочерних VC для связи друг с другом. В методе prepareForSegue родитель сохраняет указатели на оба дочерних VC, а также устанавливает себя как делегаты обоих дочерних VC, чтобы ребенок мог связаться с родителем.

Вы можете найти проект по этой ссылке: https://github.com/DuncanMC/test

Ответ 2

Вы можете использовать для него Container Views. Container View автоматически создает связь с новым контроллером представления.

Ответ 3

Пробовали ли вы подклассифицировать UITabbarcontroller или UINavigationController?

Вы можете создать свой собственный класс, простирающийся от одного из них, а затем установить его в своем раскадровке - таким образом, вы сможете создать те же отношения. Затем вы можете скрыть вкладку и добавить любую функциональность, которая вам нужна.

enter image description here

Ответ 4

Я не сделал этого, но это интересная проблема. Определяли ли вы контроллеры дочерних представлений в контроллере контейнера, прежде чем пытаться связать их в раскадровке (вы можете это сделать - код не отображается)? Из документов это похоже на то, что вам нужно сделать - может быть, это не похоже на общие классы, в которые вы можете просто перетащить их.

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

В любом случае - догадка...