0

在我的应用程序窗口中,我有两个 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 个子视图。为什么?我怎样才能让它正常工作?

谢谢

4

1 回答 1

1

消息传递 self.contentView 的事实除了对于某些事情,返回 0 可能意味着 self.contentView 为零。

您是否偶然有两个 MenuVC 实例?也许一个在 NIB 中实例化,一个在代码中实例化?

如有疑问,请记录所有内容。登录self各种方法。创建后立即记录menuSubViewmenuSubView.contentView分配后立即记录。等等。最终,您可能会发现您正在与与您想象的不同的对象进行交互。

于 2012-04-10T05:46:15.543 回答