Как мне создать собственное NSWindow без полей в Objective-C + Какао? - PullRequest
4 голосов
/ 16 февраля 2011

Позвольте мне начать с того, что это мое первое настоящее приложение с Какао.Это простое приложение, которое в значительной степени отображает мой сайт в окне без полей.В настоящее время я создаю окно без полей с использованием следующего:

- (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 ]

9 голосов
/ 16 февраля 2011

Как объяснено в в этом ответе , окна без заголовка или панели изменения размера (включая окна без полей) не могут стать ключевыми окнами.

Вы были правы относительно переопределения -canBecomeKeyWindow, но вы пропустили правильное место. Вы не должны делать это в своем делегате приложения. Вам необходимо создать NSWindow подкласс, а затем переопределить этот метод.

3 голосов
/ 16 февраля 2011

Этот пример кода Apple должен дать вам необходимую информацию, его действительно легко изменить, как он работает, и изменить его на собственное нарисованное NSWindow (без рамки: D)

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

...