0

我正在尝试向 INAppStoreWindow 添加一个工具栏。

它有这个属性:

/** The title bar view itself. Add subviews to this view that you want to show in
 the title bar (e.g. buttons, a toolbar, etc.). This view can also be set if 
you want to use a different styled title bar aside from the default one 
(textured, etc.). **/

@property (nonatomic, retain) NSView *titleBarView;

我创建了一个工具栏,并链接到我的代码中的一个插座,但是如果它有一个 NSToolbar 类,当它需要一个 NSView 时,如何将它添加为子视图?

这会引发异常: [aWindow.titleBarView addSubview:toolbar];

提前谢谢了

4

1 回答 1

2

INAppStoreWindowtitleBarView在窗口的小部件和内容视图之间巧妙地解决了这个问题:

INAppStoreWindow.m:

- (void)setTitleBarView:(NSView *)newTitleBarView
{
if ((_titleBarView != newTitleBarView) && newTitleBarView)  {
    [_titleBarView removeFromSuperview];
    [_titleBarView release];
    _titleBarView = [newTitleBarView retain];

    // Configure the view properties and add it as a subview of the theme frame
    NSView *contentView = [self contentView];
    NSView *themeFrame = [contentView superview];
    NSView *firstSubview = [[themeFrame subviews] objectAtIndex:0];
    [_titleBarView setAutoresizingMask:(NSViewMinYMargin | NSViewWidthSizable)];
    [self _recalculateFrameForTitleBarView];
    [themeFrame addSubview:_titleBarView positioned:NSWindowBelow relativeTo:firstSubview];
    [self _layoutTrafficLightsAndContent];
    [self display];
    }
}

NSToolbar不是NSView子类,它旨在与被titleBarView. 只是为了好玩,设置渐变颜色的 alphasINAppStoreWindow.m并运行应用程序;你会看到“真正的”窗口还在下面。

如果您打算使用INAppStoreWindow,则最好的选择可能是使用您自己的带有按钮的自定义视图来伪造工具栏并将其添加为titleBarView. 当然,在这种情况下,您必须自己完成所有布局。

于 2011-07-30T04:05:28.977 回答