从子视图中删除视图不会调用 willRemoveSubview

Posted

技术标签:

【中文标题】从子视图中删除视图不会调用 willRemoveSubview【英文标题】:Removing view from subview does not call willRemoveSubview 【发布时间】:2012-12-13 01:11:27 【问题描述】:

我有一个管理视图控制器,当用户选择一个菜单项时,它会切换一组先前分配的子视图控制器。

当我切换到视图控制器时,我将管理视图控制器的视图连接到子视图控制器中的视图。

[mvc.view addSubview:subvc.view];

似乎一切正常。

但是,当从视图层次结构中删除该子视图控制器的视图时(例如,在应用程序中切换页面时):

[subvc.view removeFromSuperview];

自定义视图类中的 willRemoveSubview 方法永远不会触发。我已经确认,当我调用 removeFromSuperview 时,我是在自定义视图类的实例上调用它。

我的自定义视图类中的其他方法确实会触发,例如 viewWillMoveToWindow。

NSView 参考文档说应该调用这个方法?

谁能说明为什么这不起作用?

我在 10.8.2 上运行,使用 Xcode 4.5.2 为 10.7 编译

谢谢

达伦。

【问题讨论】:

您是否覆盖了任何修改视图层次结构的方法,例如 -removeFromSuperview、-addSubview 等? 【参考方案1】:

willRemoveSubview:,顾名思义,是在超级视图上调用的,而不是被移除的子视图。

【讨论】:

谢谢,我完全误解了 Apple 文档。我现在将该方法放在超级视图的客户 NSView 类中,一切正常。

以上是关于从子视图中删除视图不会调用 willRemoveSubview的主要内容,如果未能解决你的问题,请参考以下文章

不会从子视图控制器弹出到父视图

从子视图调用超级视图函数

用从子视图调用的视图填充 iphone 屏幕

Backbone - 从子视图调用/引用父视图

从子视图控制器调用函数不起作用

从子视图中引用包含 UIView?