隐藏另一个子视图类的子视图
Posted
技术标签:
【中文标题】隐藏另一个子视图类的子视图【英文标题】:Hiding a subview from another subview class 【发布时间】:2010-11-28 21:51:37 【问题描述】:我对 Cocoa 和 Ojective-C 很陌生。 “边走边学是我的理念”。这是我的第一个 Cocoa 项目。
基本上,我使用 Interface Builder 创建了一个主 NSView(我们称之为 MainView),其中我有两个子 NSView(我们称之为 ViewNS1 和 ViewNS2)。并且 ViewNS1 绑定 view1 类, ViewNS2 绑定到 view2 类。
当我点击 ViewNS1 时,我想隐藏 ViewNS2 视图。在我的 view1 类 view1.m 文件中,我的 - (void)mouseDown:(NSEvent *) 事件中有这个 [viewNS2 setHidden:YES]。运行时没有错误,但它不起作用。但是,我可以在 MainView.m 中成功执行 [viewNS2 setHidden:YES] 并且效果很好。此外,如果我从 view1.m 执行 [viewNS1 setHidden:YES],那么它将隐藏自己的视图。
我认为这是非常基础和基本的......但是找不到解决方案。
“教学时刻”有人吗?
【问题讨论】:
【参考方案1】:ViewNS1
的控制器 应该对点击做出反应并隐藏ViewNS2
。 ViewNS1
不需要对 ViewNS2
有任何直接的了解——这就是 MVC 模式的全部要点,以消除这些依赖关系并减少耦合。
【讨论】:
我最初在 2010 年 11 月提出了这个问题。现在我已经对 Objective-c 进行了一些实验,所以你的答案是正确的!【参考方案2】:我从这个网站上的另一个帖子中找到了答案。这是我的解决方案: 我在 view1.m 的 mouseDown 事件中使用了这个 [self.superview hideViews1]。其中 hideViews1 是 MainView.m 中的一个方法,它将隐藏所有需要隐藏的视图,[viewNS2 setHidden:YES] 等。
【讨论】:
这创建了一个循环依赖,因为 MainView 和 ViewNS1 相互了解。循环依赖是不好的,因为它们使你的代码更难维护和理解。考虑重构以改用视图控制器,这将遵循 MVC 模式。 是的,我仍然需要学习 MVC 的东西。感谢您的 cmets!以上是关于隐藏另一个子视图类的子视图的主要内容,如果未能解决你的问题,请参考以下文章
调用removeFromSuperview后如何防止子视图释放自我?