如何在swift 3

时间:2016-11-16 23:46:55

标签: ios swift3 ios10

我一直在试图弄清楚如何在我的应用中保留然后恢复标签的可见性状态,但在我的生活中不能弄明白。

我通过检查Interface Builder中的“使用故事板ID”来获取视图控制器的恢复ID(并且提供了一个故事板ID)。我已将shouldSaveApplicationStateshouldRestoreApplicationState函数添加到我的AppDelegate文件中以返回true。

我遇到的问题出在View Controller的swift文件中。我无法弄清楚如何使用override func encodeRestorableState(with coder: NSCoder)对可见性状态进行编码,然后在进入视图时如何使用override func decodeRestorableState(with coder: NSCoder)对其进行解码。

我有3个标签开始被隐藏(viewDidLoad将它们全部设置为isHidden = true)。然后,根据点击的按钮,我将适当的标签设置为显示(例如,isHidden = false)。当用户退出应用程序时,我希望更改的标签在返回应用程序时显示为已恢复。

我为不同类型的对象找到了以下代码:

override func decodeRestorableStateWithCoder(coder: NSCoder) {

    // retrieve profile ID so that we can fetch entire profile
    profileID = Int(coder.decodeIntegerForKey(“profileID"))

    //image data
    if let imageData = coder.decodeObjectForKey("image") as? NSData {
      profileImageView.image = UIImage(data: imageData)
    }
    // name
    if let name = coder.decodeObjectForKey("name") as? String {
      nameTextField.text = name
    }

    super.decodeRestorableStateWithCoder(coder)
 }

但我无法弄清楚如何翻译任何这些对象类型以使用visibility属性?

请帮忙,这让我抓狂!好像这么简单......谢谢!

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题:

override func encodeRestorableState(with coder: NSCoder) {
    coder.encode(button1.isHidden, forKey: "button1")
    coder.encode(button2.isHidden, forKey: "button2")
    coder.encode(button3.isHidden, forKey: "button3")
    super.encodeRestorableState(with: coder)
}

override func decodeRestorableState(with coder: NSCoder) {
    button1.isHidden = coder.decodeBool(forKey: "button1")
    button2.isHidden = coder.decodeBool(forKey: "button2")
    button3.isHidden = coder.decodeBool(forKey: "button3")
    super.decodeRestorableState(with: coder)
}