如何在swift 3中恢复标签可见性状态
Posted
技术标签:
【中文标题】如何在swift 3中恢复标签可见性状态【英文标题】:how to restore state of label visibility in swift 3 【发布时间】:2016-11-16 23:46:54 【问题描述】:我一直试图弄清楚如何在我的应用程序中保留然后恢复标签的可见性状态,但我一生都无法弄清楚。
通过检查 Interface Builder 中的“使用 Storyboard ID”,我为视图控制器设置了恢复 ID(并且提供了一个 Storyboard ID 供使用)。我已将shouldSaveApplicationState
和shouldRestoreApplicationState
函数添加到我的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)
但我不知道如何转换这些对象类型以使用可见性属性?
请帮忙,这快把我逼疯了!看起来很简单的事情...谢谢!
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于如何在swift 3中恢复标签可见性状态的主要内容,如果未能解决你的问题,请参考以下文章
使用先前启动的 Activity 转换恢复 Activity 时查看可见性状态丢失
savedInstanceState - 可见性更改未恢复?