2009-10-14 3 views
1

이것은 this question의 후속 작업입니다. 나는 다음과 같은 코드가 있습니다 : [창에서 IsVisible] 내가 쿼리하는 데 사용할 수있는 메시지 만이있다코코아에서 메인 윈도우를 보이게하는 방법?

- (BOOL)applicationShouldHandleReopen:(NSApplication *)app hasVisibleWindows:(BOOL)flag { 
    NSLog(@"Has visible windows: %d, main window visible: %d", flag, [[app mainWindow] isVisible]); 
    if (!flag) { 
     // I need to make mainWindow visible again here. HOW??? 
     // I tried the following but it has no effect. 
     // [[app mainWindow] makeKeyAndOrderFront:self]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

없이 해당

답변

8

첫째, 코코아의 "메인 윈도우"는 내가 생각한다고 생각하는 것을 의미하지 않습니다. The “main window” is the window that is active. 주문한 창이 없다면, 메인 창은 창이없고, mainWindownil을 반환합니다. 창이 활성 상태 인 경우 기본 창이지만 주문한 창은 아닙니다 (활성 상태 인 경우 활성 상태 일 수 있음).

따라서 콘센트를 만들어야 주 창을 고려해야합니다.

isVisible 그 창에 정렬되어 있는지 여부를 알려줍니다.이 (isVisible 반환 NO)를 밖으로 주문 있다면, 당신이 그것을 주문하는 것이 좋습니다. 물론

, 당신은 그냥 그것을 를 주문할 수 없습니다은 사용자가 원하는 순서를 지정하지 않기 때문입니다. 그래서, 앞에을 주문하고 싶습니다.

하지만 맨 앞에있는 창을 만드는 것이 사용자 초점이없는 경우 많은 것을 계산하지 않습니다. 즉, 키가 아닌 경우입니다. 따라서 키를 앞에 붙이면됩니다.

보낼 메시지는 makeKeyAndOrderFront:입니다. 열쇠를 만드는 것은 또한 그것을 주요하게 만들 것입니다.

+0

감사합니다. 도움이됩니다. 예, "메인 윈도우"에서 조금 더 기대하고 있었고 더 특별하다고 생각한 것 같습니다. NIB 파일을보고 있기 때문에 혼란 스럽습니다. 응용 프로그램과 창을 나란히 보았습니다. 하지만 분명히 다른 라이프 사이클 정책을 가지고 있으며 Window는 실제로 영구 객체가 아닙니다. 그럼 내가 물어 보도록하겠습니다. 내 앱을 통해 하나의 창만 갖고 싶다면 무엇을 할 수 있을까요? 어떻게 든 컨트롤러에 객체를 유지해야합니까? applicationShouldHandleReopen이 호출 될 때마다 NIB에서 다시로드해야합니까? 또는? – Jaanus

+0

예, Mac OS X에서는 응용 프로그램과 윈도우가 동일하지 않으며 응용 프로그램에 다른 모든 최상위 윈도우가 포함되어 있지 않습니다. 그리고 네, 당신은 그것이 존재하기를 원하는 한 창을 유지합니다. 기존의 것을 중지하고 닫으려면 (IB의 해당 상자가 체크되지 않은 경우) 해제하십시오. 동일한 펜촉을 두 번 이상로드하는 것이 가능하고 때로는 바람직합니다.하지만이 때마다 펜촉의 새 복사본을 줄 것입니다.이 경우 원하는 것은 아닙니다. –

+0

덕분에 ... 후속 조치로, 마침내 주 응용 프로그램 컨트롤러를 NSWindowController의 하위 클래스로 만들고 원하는 창에 "창"콘센트를 가리켜 서 원하는대로 작동 시켰습니다. 이 방법은 창을 영구적으로 유지합니다. – Jaanus

1
[[app mainWindow] makeKeyAndOrderFront:self] 
2

는 실제로이 가정 ...로 setVisible 또는 "쇼" 메인 윈도우가 존재하며 방금 주문 했으므로 makeKeyAndOrderFront:을 사용하십시오. 그래도 대화 할 메인 창이 없기 때문에 참조 할 창을 열거 나 새 창을 열려고 할 것입니다.

+0

이것은 효과가없는 것처럼 보이고 창이 나타나지 않습니다. 즉 기본 창이 닫히면 되돌릴 수 없습니다. 기본 창이 여전히 존재하는지 여부를 알 수 없습니다. – Jaanus

관련 문제