我有自定义展开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!)
}
答案 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 {
...
}
}
}