如何在Mac应用程序的标题栏中定位进度微调器

时间:2012-06-10 00:43:17

标签: objective-c xcode interface-builder nsprogressindicator

我正在尝试在Mac OS X应用程序窗口标题栏的右侧放置一个进度微调器,但是我不能用Interface Builder做到这一点,因为它不会让我拖累里面的观点。

因此,我尝试以编程方式将其放在标题栏中,并在AppDelegate.m中的applicationDidFinishLaunching方法中使用以下代码:

loadingSpinner = [[NSProgressIndicator alloc] init];
[loadingSpinner setFrame:NSMakeRect(485, 0, 17, 17)];
[loadingSpinner setStyle:NSProgressIndicatorSpinningStyle];
NSView *titleBarView = [[_window standardWindowButton:NSWindowCloseButton] superview];
[titleBarView addSubview:loadingSpinner];

但是,这会将我的进度微调器视图放在窗口的底部而不是标题栏。似乎NSMakeRect()将其相对于窗口底部而不是顶部进行定位。

如果我将NSMakeRect(y位置)的第二个参数更改为370,它会将加载微调器放在我想要的位置,但显然当我垂直调整窗口大小时,它会将进度微调器连接到一起底部。

我以前从未见过这样的东西。我该如何解决这个问题?

P.S。:另外,我不知道是否有更“正确”的方式来获得标题栏视图。正如你所看到的,我正在使用关闭按钮视图的超级视图来获取它,这看起来有点“脏”。

1 个答案:

答案 0 :(得分:2)

Randall Brown有一些代码可以在NSWindow的标题栏on his blog中添加一个按钮。你走在正确的轨道上。关闭按钮的超级视图是整个窗口,包括标题栏。使用[[_window contentView] superview]来获得它有点不太常见。