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

5

首先,我要说这是我第一个真正的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开发。

你在哪个类中声明或定义了-canBecomeKeyWindow - user557219
1
@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; }
- specik
2个回答

9
此答案所解释的那样,没有标题栏或调整大小栏(包括无边框窗口)的窗口不能成为关键窗口。
您在覆盖-canBecomeKeyWindow方面是正确的,但是您错过了正确的位置。您不应该在应用程序代理中执行此操作。您需要创建一个NSWindow子类,然后覆盖该方法。

明白了。我想我需要创建一个子类,但是我还没有弄清楚如何做,也不知道如何将窗口的contentView移动到它里面。 - specik
1
@specik 在您的Xcode项目中创建一个NSWindow子类,例如MyWindow,并覆盖该方法。在Interface Builder中,将窗口类设置为MyWindow:选择窗口,打开Identity Inspector(菜单Tools> Identity Inspector),并在Class Identity> Class中键入MyWindow - user557219
哇,那真是超级容易。我学到了很多关于类的行为。非常感谢! - specik

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接