通过代码永久隐藏Interface Builder上的项目

时间:2016-09-28 12:44:58

标签: ios uiview uiviewcontroller interface-builder swift3

我有一个奇怪的问题。无法通过SO搜索或谷歌搜索找不到解决方案。

我的UIView中有UIViewController,由故事板引导。 通过Interface Builder将此UIView设置为隐藏。

基于某些逻辑,我需要揭示这个UIView

非常简单:myView.isHidden = false

问题是,每次加载UIViewController时,它都会覆盖之前发生的任何事情 - 例如取消隐藏视图 - 并将视图再次设置为隐藏。

是否存在永久隐藏的智能方法,或者我应该使用UserDefaults存储值并每次将其加载到ViewWillAppear中?

感谢任何可能的建议。

注意:我使用Swift3语法编码

******************* EDIT *******************

为了更清楚: 我有一堆自定义弹出窗口,它们位于专用的故事板文件中。每个弹出窗口都有一个UIViewController

这些弹出窗口基本上是成就​​弹出窗口。它们有3颗星,默认情况下都是隐藏的(通过它们持有的3 UIImageView上的IB属性)。

在应用程序中,如果用户达到某种成就,我将从该故事板文件中调用相关的UIViewController并显示(取消隐藏)相关的已实现的明星。就像那样。

主要VC:

let viewController = UIStoryboard(name: "AchievementsPopUp", bundle: nil).instantiateViewController(withIdentifier: "Category1PopUp")
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: true, completion: nil)

在相关的类文件中,我通过代码取消隐藏星形并呈现给用户。一旦用户关闭popupVC返回到主要的那个,那么UIImageView的“un-hide”属性就会丢失。 我已经解决了在UserDefaults上使用一个非常好用的属性。 问题是我必须创建15个不同的属性(5个屏幕,每个3星)并管理相关的代码变得有点凌乱:-) 如果有更智能的解决方案,我将很乐意实施!

1 个答案:

答案 0 :(得分:0)

你应该看看Apple's documentation for Preserving and Restoring State

保存和恢复过程大多是自动的,但您需要告诉iOS应用程序的哪些部分要保留。保留应用程序视图控制器的步骤如下:

  1. (必需)将恢复标识符分配给要保留其配置的视图控制器;请参阅标记视图控制器以进行保留。
  2. (必需)告诉iOS如何在启动时创建或定位新的视图控制器对象;请参阅在启动时恢复视图控制器。
  3. (可选)对于每个视图控制器,存储将该视图控制器返回其原始配置所需的任何特定配置数据;请参阅编码和解码视图控制器的状态。