Как я могу элегантно перейти от одного встроенного представления к другому (с макетом в IB)?
В этом приложении пользователь может выполнять действие A или B. При выполнении A зритель видит встроенное представление A; но также во время A зритель может выбрать просмотр встроенного представления B. (То же самое относится и к действию B, только с обратными представлениями.)
Моя установка в IB показана ниже. Не зная лучшего способа, я создал вдвое больше сцен активности, чем мне бы хотелось: для ветки "Выполнить задание А" у меня есть две параллельные копии сцены задания А. Первый из них имеет встроенный переход к View A; а во-вторых, переход к встраиванию в View B. (Настройка "B" - это обратное.)
Чтобы избежать большего дублирования, я сделал так, чтобы обе ветви действий совместно использовали Представления A и B. И хотя сцены действий были удвоены, классы, на которые они ссылаются (ActivityAViewController и ActivityBViewController), не были. Я еще не заметил каких-либо осложнений от этого.,,,
В отличие от других обходных путей, которые я видел, я выбрал вышеуказанный макет "push-pop", потому что виды A и B дороги. Я не хочу отказываться от основного представления только для загрузки дополнительного, и я не хочу загружать оба излишне. Кроме того, я хочу сделать это в IB, потому что реальное приложение более сложное, и просмотр всего моего макета помогает мне понять и развить его. С учетом сказанного мой подход все еще кажется клутзы.
Мои вопросы
- Есть ли лучший способ настроить это в IB?
- Что происходит с контроллерами общего представления сцен действия? Создается ли отдельный экземпляр класса для каждого из них, или две сцены совместно используют один и тот же экземпляр?
- Точно так же, что происходит с общими взглядами?
Объяснения Apple кажутся достаточно ясными, хотя они предполагают, что у меня больше знаний о Cocoa Touch и связанном с ним жаргоне, чем у меня сейчас. Любые разъяснения и идеи будут оценены.
1 ответ
Есть ли лучший способ настроить это в IB?
Есть и другие способы его настройки. У всех есть компромиссы. Ваш метод имеет определенный внешний вид, и если вы хотите подключить его по-другому, он будет выглядеть немного иначе. Ваш метод также имеет то преимущество, что вся навигация обрабатывается раскадровкой; дополнительный код не требуется.
Альтернативные варианты включают встроенные представления A и B в их собственный маленький навигационный контроллер. Затем переключение для просмотра другого будет включать нажатие на этот навигационный контроллер. Это позволяет избежать дублирования внешних контроллеров Activity A и B, но это изменило бы внешний вид, добавив навигационную панель во встроенные представления.
Вы также можете сделать это и скрыть панель навигации и передать сообщение от внешнего контроллера Activity A или B, чтобы сообщить ему, когда нажать на другой viewController. Это имеет недостаток некоторого дополнительного нетривиального кодирования; Раскадровка больше не управляет навигацией за вас.
Вы также можете запустить это в UITabBarController. Недостатком является то, что вы одновременно создаете и Действие A, и Действие B, если вам нужен только один, но вы можете свободно переключаться между ними без какого-либо воссоздания любого из представлений.
Что происходит с контроллерами общего представления сцен действия? Создается ли отдельный экземпляр класса для каждого из них, или две сцены совместно используют один и тот же экземпляр?
Каждый segue (включая встроенные segues) создает новый экземпляр viewController. Ни один экземпляр не является общим.
Точно так же, что происходит с общими взглядами?
Новый экземпляр A и B будет создаваться каждый раз.