如何在Objective-C + Cocoa中创建自定义无边框NSWindow?

时间:2011-02-16 07:33:58

标签: objective-c cocoa xcode nswindow

首先让我说这是我的第一个真正的Cocoa应用程序。这是一个简单的应用程序,几乎在无边框窗口中显示我的网站。我正在创建无边框窗口的方式是使用以下方法:

- (void) awakeFromNib {
    [window setStyleMask:NSBorderlessWindowMask];
    [window setAcceptsMouseMovedEvents:YES];
    [window setMovableByWindowBackground:YES];
    [window setLevel:NSNormalWindowLevel];
}

这样做的问题在于,窗口中的WebView不会将鼠标悬停在已加载页面上的元素上,也不会提供键入文本字段的功能。我知道我应该创建一个自定义窗口,然后将contentView移动到它中,但我对Objective-C来说太新了,无法弄清楚如何。

我也尝试过宣布所有这些但没有运气:

@implementation specikAppDelegate

@synthesize window;
@synthesize webView;

- (BOOL) canBecomeKeyWindow { return YES; }
- (BOOL) canBecomeMainWindow { return YES; }
- (BOOL) acceptsFirstResponder { return YES; }
- (BOOL) becomeFirstResponder { return YES; }
- (BOOL) resignFirstResponder { return YES; }

...

@end

此外,我希望能够通过点击并拖动它来移动窗口,但这是一个想法。我在网上广泛搜索过,无法找到解决方案。

我的.h文件的内容(以防万一):

@interface specikAppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSWindow *window;
    IBOutlet WebView *webView;
}

@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, retain) IBOutlet WebView *webView;

- (IBAction)openAboutPanel:(id)sender;

@end

任何帮助都会受到赞赏,就像我说的,我是Objective-C和Cocoa世界的新手,但我确实来自PHP开发背景。

2 个答案:

答案 0 :(得分:9)

this answer中所述,没有标题或调整大小栏的窗口(包括无边框窗口)无法成为关键窗口。

你是否正确覆盖-canBecomeKeyWindow,但你错过了正确的地方。您不应该在您的应用程序委托中执行此操作。您需要创建一个NSWindow子类,然后重写该方法。

答案 1 :(得分:3)

这个苹果示例代码应该为您提供所需的信息,它很容易改变它的工作方式并将其更改为您自己绘制的NSWindow(没有边框:D)

http://developer.apple.com/library/mac/#samplecode/RoundTransparentWindow/Introduction/Intro.html