2

我正在尝试在我的 Mac OS X 应用程序窗口标题栏的右侧放置一个进度微调器,但我无法使用 Interface Builder 执行此操作,因为它不允许我将视图拖到里面它。

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

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 之类的值,它会将加载微调器放在我想要的位置,但显然当我垂直调整窗口大小时,它会将进度微调器放在底部。

我以前从未见过这样的事情。我该如何解决?

PS:另外,我不知道是否有“更正确”的方式来获取标题栏视图。如您所见,我正在使用关闭按钮视图的超级视图来获取它,这似乎有点“脏”。

4

1 回答 1

2

Randall Brown在他的博客上有一些代码可以在 NSWindow 的标题栏中放置一个按钮。你走在正确的轨道上。关闭按钮的超级视图是包括标题栏在内的整个窗口。使用[[_window contentView] superview].

于 2012-06-10T01:09:48.070 回答