NIB에서 창을로드하는 데 NSWindowController
을 사용하고 있습니다. 그러나 showWindow:
으로 전화를 걸면 창은 시각적으로 최상위에 있지만 포커스는 새 창으로 이동하는 대신 원래 그대로 유지됩니다.NIB에서로드 된 NSWindow에 포커스를 두는 방법은 무엇입니까?
새 창을 만들기 전에 (cmd + n을 사용하여) 첫 번째 창 (키보드 포커스 사용)을 약간 움직이면 쉽게 알 수 있습니다. 결과는 다음과 같습니다.
하단의 초점이 맞춰진 창은 원래 창입니다. 상단에 초점이 맞지 않은 창은 새로 생성 된 창입니다.
이 관련 코드 :
AppDelegate.h :
- (IBAction)newDocument:(id) sender;
AppDelegate.m :
- (IBAction)newDocument:(id) sender {
[[[FooController alloc] init] showWindow:self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self newDocument:self];
}
FooController.h :
@interface FooController : NSWindowController { }
@end
FooController.m :
- (id)init {
self = [super initWithWindowNibName:@"FooWindow"];
return self;
}
FooWindow.xib : 변형없이
갓 만든 창 XIB.
MainMenu.xib :
창을 삭제 한 기본 MainMenu.xib입니다.
컨트롤러의 windowDidLoad
메서드에서 창에 makeKeyAndOrderFront:
을 호출해도 새 창에 포커스가 나타나지 않습니다. FooWindow.xib의 파일 소유자를 FooController
으로 설정하는 것도 도움이되지 않았습니다.
NIB에서 창을로드하여 표시하여 키보드 포커스를 수신하는 올바른 방법은 무엇입니까?
편집 : 그것은 아무것도하지 않는 window
에 메소드를 호출하는 이유를 설명 NSWindowController
의 window
방법 nil
을 반환 것 같습니다. 그런데 왜 nil
일까요?
'windowDidLoad'에서 호출하면 새 창에 포커스가 맞추어지지 않습니다. 다른 곳에서 전화해야합니까? – Zr40
makeKeyAndOrderFront 다음에 호출해야한다고 생각합니다. – lbrndnr
을 호출합니다. 이전에 시도한 것입니다. 'makeKeyAndOrderFront :','makeMainWindow'와'makeKeyWindow'를'windowDidLoad'에 넣었던 순서와 상관없이, 새 창은 포커스를 얻지 못합니다. – Zr40