【发布时间】:2017-02-06 11:03:24
【问题描述】:
我有一个奇怪的问题。无论是在 SO 中还是通过 google,都无法通过搜索找到解决方案。
我的UIViewController 中有一个UIView,它由故事板引导。
这个UIView 通过Interface Builder 设置为隐藏。
在某些时候基于某些逻辑,我需要透露这个UIView。
很简单:myView.isHidden = false
问题是每次我的UIViewController 加载时,它都会覆盖之前发生的任何事情 - 例如取消隐藏视图 - 并再次将视图设置为隐藏。
是否有一种聪明的方法可以永久隐藏或者我应该使用 UserDefaults 存储值并每次将其加载到 ViewWillAppear 中?
感谢任何可能的建议。
注意:我正在使用Swift3 语法编码
************************编辑************************
为了更清楚:
我有一堆自定义弹出窗口,它们位于专用的故事板文件中。每个弹出窗口都有一个UIViewController。
这些弹出窗口基本上是成就弹出窗口。他们有 3 颗星,默认情况下全部隐藏(通过他们持有的 3 个UIImageView 上的 IB 属性)。
在应用程序中,如果用户达到某种成就,我将从该故事板文件调用相关的 UIViewController 并显示(取消隐藏)相关的成就星。就这样。
主要风投:
let viewController = UIStoryboard(name: "AchievementsPopUp", bundle: nil).instantiateViewController(withIdentifier: "Category1PopUp")
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: true, completion: nil)
在相关的类文件中,我通过代码取消隐藏星号并呈现给用户。一旦用户关闭 popupVC 并返回主窗口,该 UIImageView 的“取消隐藏”属性就会丢失。 我已经使用 UserDefaults 上的一个属性解决了这个问题,它工作得很好。 问题是我必须创建 15 个不同的属性(5 个屏幕,每个屏幕有 3 颗星)并管理相关代码,这变得有点混乱 :-) 如果有更智能的解决方案,我将很乐意实施!
【问题讨论】:
-
每次从情节提要加载场景时,都会根据情节提要设置属性。您需要在
viewDidLoad中编写一些代码来根据需要隐藏或取消隐藏视图 -
感谢@Paulw11,这正是我将要做的“解决方法”。但看起来这不是一种解决方法,而是一种正常行为。
标签: ios uiview uiviewcontroller interface-builder swift3