通过 Unwind Segues 发送数据
Sending data through Unwind Segues
我有一个自定义展开转场问题。让我解释一下我的控制器设置:
我有一个主屏幕,它是一个导航控制器,里面有一个单元格视图。在此视图中,有一个用于添加数据的按钮,在该视图中有 4 个按钮用于添加额外的 "types" 数据。一旦用户选择了这四个选项中的一个,他们就会看到一个特定于他们选择的视图控制器,让他们可以使用完成按钮输入数据。从现在开始,我将这三个屏幕分别称为主视图、选项视图和数据视图(所有 4 个选项都遵循此约定)。
经过一些教程后,我在主视图的控制器 class 中制作了一个自定义的 unwind segue,如下所示:
@IBAction func unwindToTables(segue: UIStoryboardSegue) {
//function proto for adding data here
//populateTableWithData(data :ItemData)
}
在故事板编辑器中,任何时候我从任何视图控制器 control
+ click
到它的退出,它都会正确列出我的展开转场,这工作正常。
我现在想通过 unwind 发送数据。在数据视图中,我有一个完成按钮,用于构造和初始化一个 class 数据,称为 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,
我做了一个新的超级class 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!)
}
传递给您的 unwindToTables:
函数的 UIStoryboardSegue
有一个 属性 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 {
...
}
}
}
我有一个自定义展开转场问题。让我解释一下我的控制器设置:
我有一个主屏幕,它是一个导航控制器,里面有一个单元格视图。在此视图中,有一个用于添加数据的按钮,在该视图中有 4 个按钮用于添加额外的 "types" 数据。一旦用户选择了这四个选项中的一个,他们就会看到一个特定于他们选择的视图控制器,让他们可以使用完成按钮输入数据。从现在开始,我将这三个屏幕分别称为主视图、选项视图和数据视图(所有 4 个选项都遵循此约定)。
经过一些教程后,我在主视图的控制器 class 中制作了一个自定义的 unwind segue,如下所示:
@IBAction func unwindToTables(segue: UIStoryboardSegue) {
//function proto for adding data here
//populateTableWithData(data :ItemData)
}
在故事板编辑器中,任何时候我从任何视图控制器 control
+ click
到它的退出,它都会正确列出我的展开转场,这工作正常。
我现在想通过 unwind 发送数据。在数据视图中,我有一个完成按钮,用于构造和初始化一个 class 数据,称为 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,
我做了一个新的超级class 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!)
}
传递给您的 unwindToTables:
函数的 UIStoryboardSegue
有一个 属性 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 {
...
}
}
}