在视图之间切换时,如何维护IBOutlet变量数据

时间:2016-01-10 22:27:14

标签: ios xcode swift uiviewcontroller iboutlet

简短版本: 如何在离开视图时“快照”我的游戏状态,并在返回视图时将其恢复到准确状态?或者只是保持值而不管我当前的视图?

长版: 我有一个带有自己的视图控制器的“设置”视图和一个带有自己的视图控制器的“游戏”视图。我希望能够切换回设置以更改游戏,而不会在我回去时重新初始化我在游戏视图中的所有IBOutlet及其值。

我理解这是变量被声明的地方,因此在调用时必须重新初始化,但我甚至尝试使用全局变量在声明中定义它们,我可以在“viewDidDisappear”上更新但是值/属性似乎没有填充。我认为必须有一种方法可以将这些值(或游戏当前状态)保留在内存中,而不会在视图消失时解除分配。

我添加了一些示例代码,其中可以复制问题,但我不认为这对代码有如此多的问题,因为我对其功能和/或功能的理解有限。

提前感谢任何可以提供解决方案的帮助!

我的游戏片有一个自定义类:

class gamePiece: UILabel {

    var face = "face"

    func updateFace() {

        self.text = self.face

    }
}

var isGameOver = true

var allLabels = [gamePiece]()

我的gameViewController看起来像这样:

class gameViewController: UIViewController {

    @IBOutlet var l1: gamePiece!
    @IBOutlet var l2: gamePiece!
    @IBOutlet var l3: gamePiece!
    @IBOutlet var l4: gamePiece!

    @IBAction func buttonPressed() {

        l1.face = "hello world"
        l1.updateFace()

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if isGameOver {

            allLabels = [l1, l2, l3, l4]

            isGameOver = false

        } else {

            l1.text = allLabels[0].text!
            l2.text = allLabels[1].text!
            l3.text = allLabels[2].text!
            l4.text = allLabels[3].text!

            allLabels = [l1, l2, l3, l4]

        }

        for label in allLabels {

            label.updateFace()

        }

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidDisappear(animated: Bool) {

        allLabels = [l1, l2, l3, l4]

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

期望是l1.text会呈现“你好世界”。相反,它呈现“面子”;我的gamePiece类的对象的默认值。

我确信这是一个简单的解决办法......我只是认为它离我的脸很近,我看不到它。

0 个答案:

没有答案