Как я могу элегантно перейти от одного встроенного представления к другому (с макетом в IB)?

В этом приложении пользователь может выполнять действие A или B. При выполнении A зритель видит встроенное представление A; но также во время A зритель может выбрать просмотр встроенного представления B. (То же самое относится и к действию B, только с обратными представлениями.)

Моя установка в IB показана ниже. Не зная лучшего способа, я создал вдвое больше сцен активности, чем мне бы хотелось: для ветки "Выполнить задание А" у меня есть две параллельные копии сцены задания А. Первый из них имеет встроенный переход к View A; а во-вторых, переход к встраиванию в View B. (Настройка "B" - это обратное.)

Чтобы избежать большего дублирования, я сделал так, чтобы обе ветви действий совместно использовали Представления A и B. И хотя сцены действий были удвоены, классы, на которые они ссылаются (ActivityAViewController и ActivityBViewController), не были. Я еще не заметил каких-либо осложнений от этого.,,,

В отличие от других обходных путей, которые я видел, я выбрал вышеуказанный макет "push-pop", потому что виды A и B дороги. Я не хочу отказываться от основного представления только для загрузки дополнительного, и я не хочу загружать оба излишне. Кроме того, я хочу сделать это в IB, потому что реальное приложение более сложное, и просмотр всего моего макета помогает мне понять и развить его. С учетом сказанного мой подход все еще кажется клутзы.

Мои вопросы

  1. Есть ли лучший способ настроить это в IB?
  2. Что происходит с контроллерами общего представления сцен действия? Создается ли отдельный экземпляр класса для каждого из них, или две сцены совместно используют один и тот же экземпляр?
  3. Точно так же, что происходит с общими взглядами?

Объяснения Apple кажутся достаточно ясными, хотя они предполагают, что у меня больше знаний о Cocoa Touch и связанном с ним жаргоне, чем у меня сейчас. Любые разъяснения и идеи будут оценены.

Раскадровка навигации со встроенными представлениями

1 ответ

Решение

Есть ли лучший способ настроить это в IB?

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

Альтернативные варианты включают встроенные представления A и B в их собственный маленький навигационный контроллер. Затем переключение для просмотра другого будет включать нажатие на этот навигационный контроллер. Это позволяет избежать дублирования внешних контроллеров Activity A и B, но это изменило бы внешний вид, добавив навигационную панель во встроенные представления.

Вы также можете сделать это и скрыть панель навигации и передать сообщение от внешнего контроллера Activity A или B, чтобы сообщить ему, когда нажать на другой viewController. Это имеет недостаток некоторого дополнительного нетривиального кодирования; Раскадровка больше не управляет навигацией за вас.

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

Что происходит с контроллерами общего представления сцен действия? Создается ли отдельный экземпляр класса для каждого из них, или две сцены совместно используют один и тот же экземпляр?

Каждый segue (включая встроенные segues) создает новый экземпляр viewController. Ни один экземпляр не является общим.

Точно так же, что происходит с общими взглядами?

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

Другие вопросы по тегам