添加子视图到 NSView 显示,但不能删除
Posted
技术标签:
【中文标题】添加子视图到 NSView 显示,但不能删除【英文标题】:Adding Subviews to NSView show up, but can not be removed 【发布时间】:2012-04-10 04:40:03 【问题描述】:在我的应用程序窗口中,我有两个 NSView。左侧的 NSView(“菜单”)包含几个按钮。单击其中一个按钮时,它应该更改右侧 NSView(“内容”)的内容。
对于右侧的每个视图,我都有一个单独的 NSViewControllers 被加载,它们的视图被添加为子视图。当在左侧按下另一个按钮时,应删除右侧添加的子视图,并且应将新视图作为子视图加载。
为此,我在 AppDelegate 中加载了我的菜单,其中包含以下内容:
MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil];
menuSubView.contentView = (NSView*)[self contentView];
[[self menuView] addSubview:[menuSubView view]];
这很好用。如您所见,我在 Menu VC 中有一个 NSView 指针,它指向 contentView,以便我可以使用子视图填充它。
现在,作为一种按下按钮的方法,我执行以下操作:
SomeContentVC *subView = [[SomeContentVC alloc] initWithNibName:@"SomeContentVC" bundle:nil];
[self.contentView addSubview:[subView view]];
这不起作用。
但是,如果我从 MenuViewController 实现的 awakeFromNib 方法添加子视图(在应用程序打开时默认内容的情况下)它可以工作。但是,当我尝试使用
删除该子视图时[[self.contentView setSubviews:[NSArray array]];
我不能。有趣的是,如果我尝试计算子视图的数量(即使在 awakeFromNib 方法中添加了一个),它也会为 self.contentView 返回 0 个子视图。为什么?我怎样才能让它正常工作?
谢谢
【问题讨论】:
什么是 self.contentView?据我所知 NSViewController 没有这样的属性,除非你自己创建它。 在 AppDelegate 中,它是一个指向右侧 NSView(我的应用程序的内容部分)的 NSView 指针。在 MenuVC 中,我还有一个 NSView 指针,它在创建时从 AppDelegate 填充,并且我传递 AppDelegate 的指针,以便我可以在主应用程序窗口中填充正确的 NSView。也许这有助于lh5.googleusercontent.com/-rsaZ6LZLeqM/T4PCBu-z43I/AAAAAAAAAAo/… 【参考方案1】:消息 self.contentView 什么都没有,除了在某些情况下,返回 0 可能意味着 self.contentView 为零。
您是否偶然有两个 MenuVC 实例?也许一个在 NIB 中实例化,一个在代码中实例化?
如有疑问,请记录所有内容。以各种方式记录self
。在您创建它之后记录menuSubView
。在分配之后记录menuSubView.contentView
。等等。最终,您可能会发现您正在与与您想象的不同的对象进行交互。
【讨论】:
就是这样...我在 MenuViewController 的 NIB 中还有一个 NSObject...谢谢!以上是关于添加子视图到 NSView 显示,但不能删除的主要内容,如果未能解决你的问题,请参考以下文章