向优胜美地视图添加按钮时出错。“ NSWindow警告:添加未知的子视图:”

sha*_*ada 3 xcode objective-c osx-yosemite

我的代码部分是:

 NSWindow *appWindow = [NSApp appWindow];

    NSView *superview = [[appWindow standardWindowButton:NSWindowCloseButton] superview];

    NSRect frame;

    frame.size = NSMakeSize([self.mBuyFullVersionView frame].size.width,[self.mBuyFullVersionView frame].size.height);

    frame.origin.y =[superview frame].size.height - [self.mBuyFullVersionView frame].size.height -kVerticalSpacing;

    frame.origin.x =[superview frame].size.width - [self.mBuyFullVersionView frame].size.width - kHorizontalSpacing - 6;

    [self.mBuyFullVersionView setFrame:frame];

    [superview addSubview: self.mBuyFullVersionView];
Run Code Online (Sandbox Code Playgroud)

man*_*ahn 6

就像它所说的,“ NSWindow警告:添加未知的子视图:…”是NSWindow的警告。当将子视图直接添加到Windows backgroundView上(称为borderView而不是contentView)时,将显示警告。此警告是无害的,但是它是不建议将视图添加到backgroundView中,因为这将来可能会中断。

如果要将视图添加到titleBar,则可以使用工具栏或NSTitlebarAccessoryViewController。对于其他所有内容,请使用窗口的contentView。

从Apples API发行说明中:

NSWindow从不支持客户端将子视图添加到除contentView之外的任何其他内容。某些应用程序会将子视图添加到contentView.superview(也称为窗口的边框视图)。现在,NSWindow将在检测到以下情况时记录日志:“ NSWindow警告:添加未知子视图:”。这样做的应用程序将需要解决此问题,因为它会阻止10.10上的新功能正常运行。有关官方API,请参见titlebarAccessoryViewControllers。

NSWindow现在可以将正式已知的子视图添加到标题栏/工具栏区域。视图将使用名为NSTitlebarAccessoryViewController的新NSViewController子类包装,并使用“ titlebarAccessoryViewControllers” API添加到窗口中。有一组用于添加和插入titlebarAccessoryViewControllers的方法,例如addTitlebarAccessoryViewController:和removeTitlebarAccessoryViewControllerAtIndex:。但是,也可以利用“ removeFromParentViewController”轻松删除给定的子视图控制器。NSTitlebarAccessoryViewController具有一个属性来告知NSWindow将视图放置在何处(layoutAttribute),以及一个属性来确定其在全屏状态下的行为(fullScreenMinHeight)。现在不推荐使用NSToolbar fullScreenAccessoryView API,