How do I create a custom borderless NSWindow in Objective-C + Cocoa?

梦想的初衷 提交于 2019-12-21 18:00:27

问题


Let me start off by saying that this is my first real Cocoa app. It's a simple app that pretty much displays my website in a borderless window. The way I'm currently creating a borderless window is using the following:

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

The problem with this is that as a result, the WebView within the window does not pass mouse over events to elements on the loaded page, nor does it provide the ability to type in text fields. I know that I'm supposed to create a custom window instead and move the contentView into it but I'm too new to Objective-C to figure out how.

I've also tried declaring all of these with no luck:

@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

Additionally, I'd like to be able to move the window by clicking and dragging it anywhere but that's a side thought. I've searched extensively online, and cannot find a solution to this.

Contents of my .h file (just in case):

@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

Any help would be appreciated, and like I said, I'm super new to the world of Objective-C and Cocoa, but I do come from a PHP development background.


回答1:


As explained in this answer, windows without title or resize bar (including borderless windows) cannot become key windows.

You were right about overriding -canBecomeKeyWindow, but you’ve missed the correct place. You shouldn’t do it in your application delegate. You need to create an NSWindow subclass and then override that method.




回答2:


This sample code of apple should give you the information you need, its really easy to change the way it works and change it into your own drawn NSWindow ( without a border :D )

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



来源:https://stackoverflow.com/questions/5013695/how-do-i-create-a-custom-borderless-nswindow-in-objective-c-cocoa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!