iOS Swift-将数据从第一个ViewController传递到第三个ViewConTroller

时间:2019-05-24 10:00:04

标签: swift segue

例如,我的应用有3个ViewController: A,B,C 我使用Segue移动 A-> B-> C 。我的问题是在ViewController C 上,我想直接获取ViewController A 的数据,而不传递 A-> B 中的数据,然后< strong> B-> C 。 有可能吗?

更多信息:我制作了一个包含很多步骤的表单步骤A-> B-> C然后提交)。因此,在最后一步,我想在每一步中收集所有用户的输入并提交。

如何在最后一步获取所有数据?

  • 1。暂时将数据存储在某个地方,然后进入最后一步

  • 2。在最后一步,通过魔术直接获取每个步骤的数据吗?

2 个答案:

答案 0 :(得分:2)

您可以在AC之间创建序列。

然后在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
    }

编辑

如果要在视图控制器ABC之间共享表单数据,则可以创建一个Signleton类,并将所有表单数据设置为一个变量:

class FormData {
    static let shared = FormData()

    private init() {}

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

要在视图控制器C中获取表单数据,请使用:

let myFormData = FormData.shared.formData

答案 1 :(得分:1)

如果您使用的是NavigationController,则可以通过寻址它的viewControllers[index]来访问通过它直接推送到它的每个控制器。

例如,您可以通过覆盖默认类来使用自定义NavigationController,并将每个步骤的数据存储在其中,所有推入其中的视图控制器都可以访问它,而在C中,您可以像这样检索它们:

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

或只是暂时将数据保存在AppDelegate中,可以在应用程序中的任何位置访问它,不建议这样做,因为这会使代码变脏

如果它没有帮助,请给我更多有关您的应用程序结构以及您打算做什么的信息:)


创建一个新的可可触摸类,并将其命名为:CustomNavigationController,并将其命名为UINavigationController subclass ,如果您使用的是故事板,请设置导航控制器类,该类< strong> 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)
    }