Как раскадрировать контроллер представления переключаемого контейнера? - PullRequest
3 голосов
/ 09 марта 2012

Есть ли способ раскадровки пользовательского контроллера представления контейнера, который ведет себя очень похоже на UITabBarController?

Мой контроллер вида контейнера похож на UITabBarController в том, что:

  • переключает содержимое экрана
  • в ответ на действие пользователя над некоторым виджетом

Но он отличается от UITabBarController тем, что:

  • переключает только часть экрана (материализована прямоугольной рамкой на экране)
  • пользовательское действие для запуска переключения включает определенные UIControl s вместо панели вкладок в нижней части экрана.

Кроме того, мне бы очень хотелось, чтобы раскадровка моего приложения происходила очень похожим образом, а UITabBarController - это раскадровка:

  • Одна сцена представляет представление контейнера со всем содержимым, которое не переключено
  • Столько дочерних сцен, сколько я могу переключить контент для кадра.
  • Один переход от каждого переключателя на соответствующую дочернюю сцену.

Однако я не смог этого достичь. Есть ли способ (лучше, чем, возможно, искусственно сделать мой контроллер представления контейнера переключения подклассом UITabBarController)?

1 Ответ

1 голос
/ 14 мая 2012

Насколько я могу судить, это одна из областей, где раскадровка гораздо менее полезна, чем должна быть.

Из того, что я вижу, вы можете вручную вставить все ваши переключающие виджеты, связать их с соответствующими контроллерами представления цели и сконфигурировать получившиеся сегменты как экземпляры ваших пользовательских подклассов UIStoryboardSegue, которые переопределяют ( s) perform и при желании реализовать prepareForSegue:sender: в вашем контроллере вида контейнера ... но (a) вы, наверное, уже поняли это и (b) для меня, это вряд ли похоже на то, к чему вы стремитесь в первую очередь .

По этой и другим причинам я бы (и сделал это…) избегал бы раскадровок в таком сценарии вообще и вместо этого использовал бы NIB вместе с IBOutletCollection (не поддерживается в раскадровках - вы ничего не можете подключить к ним!) для контроллеров представления.

В моем случае я мог бы динамически заполнить сегменты UISegmentedControl или строки UITableView, используя свойства title / image tabBarItem s подключенных контроллеров представления.

Это, однако, компромисс , так как вы теряете возможность конфигурировать переходы между вашими контроллерами представления в IB. Кроме того, он опирается на подразумеваемый контракт, согласно которому контроллер представления имеет правильно сконфигурированный tabBarItem , который не может быть выражен в IB.

В моем случае это не имело значения, но ваш пробег может сильно отличаться!

Разделение макета и использования контейнера на отдельные NIB помогло упростить задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...