Создание отдельных контроллеров представления для каждого представления iOS? - PullRequest
1 голос
/ 08 марта 2020

Это очень простой простой вопрос, и я считаю, что ответ «да, это лучшая практика», но я просто хотел задать вопрос.

При создании новых представлений в раскадровке в Xcode Является ли хорошей идеей создание отдельных пользовательских файлов контроллера представления, чтобы обрабатывать каждое представление отдельно?

То есть, если я создаю новое представление под названием «Проверка входа в систему», я должен создать «loginQuizViewController», который будет обрабатывать весь код, который я пишу для этого представления?

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Краткий ответ:

Да, с каждой сценой раскадровки обычно связан уникальный класс контроллера представления. Контроллер представления имеет root view, который в свою очередь может иметь много подпредставлений ниже этого, и каждое подпредставление может иметь дополнительные подпредставления. Эта коллекция представлений в целом известна как «иерархия представлений».


Длинный ответ:

Да, с каждой «сценой» раскадровки 1016 * связан контроллер представления. И вообще этот класс контроллера представления является определенным подклассом UIViewController, который уникален для этой конкретной сцены Interface Builder. Но вам не обязательно иметь подкласс контроллера представления, и вы можете, например, использовать один из существующих классов (например, это не редкость для сцен контроллера навигации или сцен контроллера панели вкладок).

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

Два небольших уточнения:

  • Вы ссылаетесь на «представление викторины».

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

    A одна сцена «викторины» будет связана с уникальным классом контроллера представления, и экземпляр этого класса контроллера представления будет иметь одно «root представление» (идентифицируемое свойством view), но что view будет иметь целую кучу подпредставлений (например, представления изображений, кнопки, метки и т. д. c.), а некоторые из них могут иметь собственные подпредставления.

    Таким образом, одна сцена раскадровки имеет свою собственный уникальный класс контроллера представления, но связанный с целой иерархией представлений.

  • Мы часто думаем о сцене и связанном с ней контроллере представления как о представлении всего, что вы можете видеть в любой данный момент. момент времени, но это не всегда отношения один-к-одному. Иногда то, что вы видите, состоит из нескольких сцен раскадровки и соответствующих им контроллеров представления.

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

    Или, в более экстремальном примере, мы можем определить наш собственный контейнер контроллеров представления . В приведенном ниже примере, когда мы представляем A, мы можем определить нижнюю половину экрана, которая будет управляться совершенно отдельной сценой B, которая имеет собственный контроллер вида:

    enter image description here

    В этом случае и A, и B имеют свои собственные сцены IB и свои соответствующие контроллеры представления. Добейтесь этого, добавив «вид контейнера» к сцене А (светло-голубой UIView на снимке экрана выше).

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

1 голос
/ 08 марта 2020

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

При отображении из раскадровки большинство элементов, которые вы видите, фактически являются представлениями контроллеров представления (другие являются заполнителями). «Login Quiz» в концептуальном смысле звучит как экран , поэтому (не зная ваших данных), вероятно, имеет смысл создать LoginQuizViewController.

...