通过Unwind Segues发送数据

时间:2016-06-19 18:43:23

标签: ios uiviewcontroller segue unwind-segue

我有自定义展开segue问题。让我解释一下我的控制器设置:

我有一个主屏幕,它是一个导航控制器,里面有一个单元格视图。在此视图中,有一个用于添加数据的按钮,在该视图中有4个按钮用于其他"类型"要添加的数据。一旦用户选择了这四个选项中的一个,他们就会看到一个特定于他们选择的视图控制器,让他们用完成按钮输入数据。我将从现在开始将三个屏幕称为主视图,选项视图,然后是数据视图(所有4个选项都遵循此约定)。

在一些教程之后,我在Main View的控制器类中进行了自定义展开segue,如下所示:

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    //function proto for adding data here
    //populateTableWithData(data :ItemData)
}

在情节提要编辑器中,只要我control + click从任何View Controller到它的退出,它都会正确列出我的展开segue,这样可以正常工作。

我现在想要通过展开发送数据。在数据视图中,我有一个完成按钮,用于构造和初始化一个名为ItemData的数据类,我希望通过它来传递segue。

我在SO或其他网站上发现的大多数问题涉及正常的segues,当我尝试实现它们时,应用程序会导致运行时错误/无法编译。

之前是否有人遇到过此问题,并为此问题提供解决方案?任何帮助或正确方向的点将非常感谢!

编辑:

我编辑了我的展开功能,如下所示:

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    let dataC = segue.sourceViewController as? DataVC
    let data : ItemData = dataC!.SubmittedData! //unwrapping error

    print(data.Name)


    //save data

}

并且在每个新的{1-4} ViewController之上我有以下内容:

import UIKit

class New1ViewController: DataVC,

我创建了一个新的超类DataVC:

import Foundation

class DataVC: UITableViewController {
    var SubmittedData: ItemData?
}

但现在我遇到了一个解缠问题......我必须先将SubmittedData初始化吗?

编辑2:

以为我可能会按下我正在做的完成按钮...

@IBAction func DonePressed(sender: AnyObject) {

    let n = ...
    ...
    let d = ...

    super.SubmittedData = ItemData(FieldType: "1", CName: n!, CPhone: p!, CAddress: a!, ShouldBe: s!, Repeats: r!, Starts: b, RemindMe: m!, AdditionalNotes: d!)

}

1 个答案:

答案 0 :(得分:2)

传递给UIStoryboardSegue函数的unwindToTables:有一个属性sourceViewControllee,这将是Data视图控制器的实例。

您需要从所有视图控制器继承公共超类,以便添加所需的属性:

class DataVC: UITableViewController {
    var submittedData: ItemData?
}

然后你会有类似的东西:

class New1ViewController: DataVC,... {
...
}

然后在您的展开方法中,您可以检索submittedData属性

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    if let dataVC = segue.sourceViewController as? DataVC {
      if let info = dataVC.submittedData {
         ...
      }
    }
 }