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

В этом приложении пользователь может выполнять действие 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 и связанном с ним жаргоне, чем у меня сейчас. Любые разъяснения и идеи будут оценены.

Storyboard of Navigation With Embedded Views

1 Ответ

0 голосов
/ 08 мая 2018

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

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

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

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

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

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

Каждый переход (включая встроенные переходы) создает новый экземпляр viewController. Экземпляры не передаются.

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

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

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