隐藏另一个子视图类的子视图

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控制器 应该对点击做出反应并隐藏ViewNS2ViewNS1 不需要对 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后如何防止子视图释放自我?

使用 MKMapView 和可触摸的子视图创建视图

当从一个子调用但另一个子调用时添加控件的子工作

UIButton 作为 MKAnnotationView 的子视图不起作用

在另一个子视图之上检测一个子视图

IOS、UIView、检测子视图隐藏状态变化