iOS Swift - передача данных из первого ViewController в третий ViewConTroller - PullRequest
0 голосов
/ 24 мая 2019

Например, у моего приложения есть 3 ViewControllers: A, B, C Я использую Segue для перемещения A-> B-> C .Моя проблема в том, что в ViewController C я хочу получить данные ViewController A напрямую, без передачи данных из A-> B , затем B-> C .Возможно ли это?

Для более подробной информации: я сделал форму со многими шагами ( Шаг A-> B-> C, затем отправив ).Итак, на последнем шаге, Я хочу собрать все пользовательские данные на каждом шаге и отправить их.

Как я могу получить все данные на последнем шаге?

  • 1.Временно сохраните данные где-нибудь, а затем получите на последнем шаге

  • 2.На последнем шаге, напрямую получая данные каждого шага с помощью магии?

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Вы можете создать переход между A и C.

Затем в A контроллере вида, проверьте destination контроллер вида:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let aVC = segue.destination as? aVC {
        // pass data to A view controller
    } else if let bVC = segue.destination as? bVC {
        // pass data to B view controller
    }

EDIT

Если вы хотите поделиться данными формы с контроллером представления A, B и C, вы можете создать класс Signleton и установить все данные формы в переменной:

class FormData {
    static let shared = FormData()

    private init() {}

    var formData: String = "variable containing the form data"
}

А чтобы получить данные формы в контроллере вида C, используйте:

let myFormData = FormData.shared.formData
1 голос
/ 26 мая 2019

Если вы используете NavigationController, вы можете получить доступ к каждому контроллеру, подключенному к нему, напрямую через него, обратившись к нему viewControllers[index].

Например, вы можете использовать пользовательский NavigationController, переопределяя класс по умолчанию и сохраняя в нем данные каждого шага, которые доступны для всех контроллеров представления, вставленных в него, а в C вы можете получить их следующим образом:

let navVC = self.navigationController as? YourCustomNavigationController
let data = navVC.getData()

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

Если это не помогло, пожалуйста, дайте мнебольше информации о структуре вашего приложения и о том, что вы пытаетесь сделать:)


Создайте новый класс касания какао и назовите его следующим образом: CustomNavigationController и сделайте его подклассом из UINavigationController и, если вы используете раскадровку, задайте класс контроллера навигации, который A вставляется в него в CustomNavigationController (на вкладке инспектора идентификации) в Интерфейсном конструкторе

Затем вы можете добавить свойсвойства и методы для CustomNavigationController, такие как:

var data : AnyObject?

func storeData(data:AnyObject){

}

func getData() -> AnyObject? {
    return data
}

И из любого контроллера представления этого передать значение в контроллер навигации:

let navVC = self.navigationController as! CustomNavigationController
        navVC.storeData(data: myData)
    }
...