Я пытаюсь сделать регистрационную форму с несколькими видами, но только одним контроллером. Перейдя к следующему представлению, я записываю ввод в структуру, которая будет отправлена на сервер позже. Проблема, с которой я сталкиваюсь, заключается в том, что VC повторно инициализируется при вводе нового представления, и поэтому структура пользователя также повторно инициализируется. Есть ли способ обойти несколько ViewControllers?Single View Controller для нескольких видов
ответ
Похоже, вы используете навигационный контроллер для ввода новых копий одного и того же контроллера просмотра, когда ваш пользователь переходит из режима просмотра.
Что я рекомендую делать, так это иметь один контроллер вида (который имеет представление контента) и несколько подклассов UIViews.
Когда пользователь нажимает «Далее», чтобы перейти к следующему виду, анимируйте, перемещая старый вид в сторону и вставляя новый в положение.
Оформить заказ "Пример II" от this tutorial. Вместо использования представлений изображений просто используйте свои собственные (подклассы) UIViews.
Here is a related question с более типовым кодом.
Если единственная причина для использования одного контроллера вида состоит в том, что вы можете сохранять свои данные на разных экранах, которые вы пытаетесь представить, вероятно, вам следует рассмотреть возможность хранения данных вне класса контроллера вида. Например, используя другой класс с общим, например:
class DataContainer {
let sharedInstance = DataContainer()
var someString: String?
}
Теперь Вы можете получить доступ к тем же данным с любого контроллера представления следующим образом (без потери данных при переходе на другой контроллер зрения):
if let someString = DataContainer.sharedInstance.someString {
print(someString)
}
Вам нужно иметь контроллер родительского контроля, в котором находится дочерний элемент управления childView, принадлежащий вашему пути регистрации. Вот простой учебник о том, как достичь этой функции (в этом случае добавить Sweep Gesture Recognizer для навигации), сделанный Vea Software.
Как это все ваши childViewController могут иметь свой собственный класс для логики, и вы не должны запустить SEGUE между ними ... просто прокручивать друг к другу.
Как вы переходите к следующему виду? –
Путем запуска segue – Raoul
Segues всегда от одного контроллера представления к другому. Вы должны будете использовать свой единственный VC и выполнять пользовательские анимированные переходы, подобные тем, которые я описал ниже. –