我有 2 个 ViewController:ViewController1、ViewController2。 ViewController1 中的“添加”按钮将显示 ViewController2。然后,用户将在 ViewController2 中输入值,然后通过prepareforsegue 将其传回 ViewController1。然后,这些值将附加到 viewcontroller1 中数组类型的属性上。
这会被重复,用户继续按添加按钮从 ViewController1 中调出 ViewController2,然后添加新值,通过prepareforsegue 附加到 ViewController1 中数组类型的属性上。
但是,从 ViewController2 附加第一组值后,情况并非如此。第二组值将覆盖第一组值。
示例。
第一次通过后->力=[1],刚度[1]
第二次通过后->力=[2],刚度[2]
我想要这个 -> 力 = [1,2], 刚度[1,2]
我想继续添加直到->力= [1,2,3,4,5],刚度[1,2,3,4,5]
ViewController1
class ViewController1: UITableViewController, UITableViewDataSource {
var force = [Float]()
var stiffness = [Float] ()
@IBAction func Add(sender: AnyObject) { }
}
ViewController2
class ViewController2: UIViewController {
var forceVar : Float = 0.0
var stiffVar : Float = 0.0
@IBAction func submit(sender: AnyObject) {
self.performSegueWithIdentifier("springSubmit", sender: sender)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if(segue.identifier == "springSubmit") {
var svcSubmitVariables = segue.destinationViewController as ViewController1
svcSubmitVariables.force.append(forceVar)
svcSubmitVariables.stiffness.append(stiffVar)
}
最佳答案
performSegueWithIdentifier 方法将始终初始化新的 View Controller ,因此在您的示例 View Controller 中,显示 ViewController2 与提交数据后初始化的对象是不同的对象,并且这个新初始化的对象将仅具有初始化值。为了实现您正在寻找的功能,您需要在 ViewController1 上声明一个函数,该函数会将数据附加到您的数组中,将该函数传递给 ViewController2 并在提交方法上调用它,以便您的 View Controller 看起来类似于以下内容:
ViewController1
class ViewController1: UITableViewController, UITableViewDataSource {
var force = [Float]()
var stiffness = [Float] ()
override func viewWillAppear(animated: Bool) {
//check if values are updated
println(force)
println(stiffness)
}
@IBAction func Add(sender: AnyObject) {
self.performSegueWithIdentifier("viewController2", sender: sender)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if(segue.identifier == "viewController2") {
var addVariables = segue.destinationViewController as ViewController2
addVariables.submitFunc = appendData
}
}
func appendData(newForce:Float,newStiffness:Force){
force.append(newForce)
stiffness.append(newStiffness)
}
}
ViewController2
class ViewController2: UIViewController {
var forceVar : Float = 0.0
var stiffVar : Float = 0.0
var submitFunc:((newForce:Float,newStiff:Float)->())!
@IBAction func submit(sender: AnyObject) {
submitFunc(forceVar,stiffVar)
self.dismissViewControllerAnimated(false, completion: nil)
}
}
关于xcode - swift - 通过prepareforsegue在2个 View Controller 之间添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557738/