xcode - swift - 通过prepareforsegue在2个 View Controller 之间添加值

标签 xcode swift segue viewcontroller

我有 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/

相关文章:

iphone - Apple 是否已经在 Xcode 4 中解决了这些问题?

Swift:确保 urlSession.dataTask 在传递结果之前在我的函数中完成

objective-c - 闪屏问题,Xcode/iOS 6/Phonegap

xcode - 在 SWIFT 中绘制圆弧进度

ios - 在 View Controller 之间来回切换

ios - 如何在 Siesta 中定义内容转换器?

ios - 根据 slider 更改 UIView 中的内容

ios - Swift - 子类化 UITableView

ios - 如何判断我的 ViewController 何时再次成为堆栈顶部?

ios - 将属性传递给另一个 View