在我的应用程序窗口中,我有两个NSView。在左侧,NSView(“菜单”)包含几个按钮。单击其中一个按钮时,应更改右NSView(“内容”)的内容。
对于右边的每个视图,我有一个单独的NSViewControllers,它们被加载并且它们的视图被添加为子视图。当在左侧按下另一个按钮时,应删除右侧添加的子视图,并将新视图作为子视图加载。
为了实现这一点,我使用以下内容在AppDelegate中加载我的菜单:
MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil];
menuSubView.contentView = (NSView*)[self contentView];
[[self menuView] addSubview:[menuSubView view]];
这很好用。正如您所看到的,我在菜单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个子视图。为什么?我怎样才能让它正常工作?
由于
答案 0 :(得分:1)
事实上,self.contentView消息传递什么都没有,除了某些东西,返回0可能意味着self.contentView是零。
你是偶然发现了两个MenuVC的例子吗?也许一个在NIB中实例化,一个在代码中实例化?
如有疑问,请记录所有内容。以各种方法记录self
。创建后立即记录menuSubView
。分配后立即记录menuSubView.contentView
。等等。最终,你可能会发现你正在与不同的对象进行交互,而不是你想象的那样。