有没有办法以编程方式将应用程序添加到所有空间?我希望我的应用程序默认位于所有空间。
答案 0 :(得分:3)
您需要的方法是在NSWindow。
狮子使用:
- (void)setCollectionBehavior:(NSWindowCollectionBehavior)behavior
对于pre-Lion,重写以下内容以返回YES:
- (BOOL)canBeVisibleOnAllSpaces
答案 1 :(得分:2)
这段代码适合我(至少在我最近工作的一个小项目中的10.6.8):
-(void)windowDidLoad {
// Make the window visible on all Spaces
if([[self window] respondsToSelector: @selector(setCollectionBehavior:)]) {
[[self window] setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];
}
else if([[self window] respondsToSelector: @selector(canBeVisibleOnAllSpaces)]) {
[[self window] canBeVisibleOnAllSpaces]; // AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER_BUT_DEPRECATED
}
}
我将此代码放在主窗口的WindowController的(自定义子类)中。
答案 2 :(得分:1)
确定。只是以编程方式设置workspaces-app-bindings不起作用。我试过了:
1) Verified no entries were in System Preferences->Spaces
2) defaults write com.apple.dock workspaces-app-bindings -dict-add com.apple.mail 65544
3) killall Dock (also needed to kill System Preferences )
4) Opened System Preferences->Spaces to verify the Mail app entry
appeared and was set to Every Space
5) Launched Mail, but it was still stuck to Space 1
6) Only when I went back into System Preferences->Spaces and changed the
Mail app *from* Every Space and then *back* to Every Space did the Mail
app stick to every space
很明显,系统首选项正在做一些额外的事情来激活设置。有谁知道这可能是什么?谢谢!
更新:所以我能够通过使用applescript api而不是用户默认api来实现这一点。以下文章讲述了如何使用applescript附加条目。然后就是杀了码头。
答案 3 :(得分:0)
使用OS X附带的defaults-command,如下所示:
defaults write com.apple.dock workspaces-app-bindings -dict-add com.apple.mail 65544
通过发出上述命令,您可以将“com.apple.mail”标识的应用程序设置为显示在每个空格中。 65544是一个神奇的价值,说“每个空间”。如果键值对(标识符+设置)存在,它将被覆盖。
请注意,您必须重新加载Dock(killall Dock
)并以某种方式从应用程序中执行这些命令。在objective-c中,您可以使用以下代码段退出Dock:
NSRunningApplication *dock = [NSRunningApplicationrunningApplicationWithBundleIdentifier:@"com.apple.dock"];
[dock terminate];
在AppleScript中使用以下内容:
quit application "Dock"
答案 4 :(得分:0)
您的应用代表应该看起来像这样......
#import "alwaysOnTopAppDelegate.h"
@implementation alwaysOnTopAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
@end