2009-07-07 3 views
0

첫 번째 코코아 응용 프로그램 중 하나에서 사용자 텍스트 입력 및 텍스트 처리 출력을위한 두 개의 NSTextField 인스턴스가있는 단일 창만 있습니다.NSWindow 대리자 (windowShouldClose)

사용자가 왼쪽 상단의 빨간색 x를 클릭하면 창이 닫히지 만 응용 프로그램은 계속 실행 중이며 아이콘은 도킹 상태를 유지합니다. 즉, 일반적인 Mac 동작입니다.

사용자가 도크 또는 바탕 화면에서 아이콘을 두 번 클릭하면 창을 다시 열지 않습니다. 이는 일반 Mac 동작과 유사하지만 사용자에게는 혼란 스럽습니다.

앱을 실행 상태로 되돌리려면 사용자는 주 메뉴 또는 상황에 맞는 메뉴에서 강제 종료해야하며 아이콘 중 하나를 클릭하여 앱을 다시 시작해야합니다.

나는 애플의 문서 및 포럼을 검색하고, 다음은 윈도우의 폐쇄 (처음 설정 :이 나중에 재개 할 수 있도록 과부를 숨기) : 방지한다 듯

  1. 가 대리자를 추가하십시오 NSApp에

  2. 대표는 [mainWindow makeKeyAndOrderFront : self]를 호출하는 -applicationShouldHandleReopen을 구현합니다. 및 -windowShouldClose가 호출되어 있지만, 윈도우가 닫히고, TRUE

  3. 대표는 그러나 FALSE 반환 -windowShouldClose를 구현 반환합니다.

무엇이 여기에 있습니까? 대안 (내 두 번째 선호)으로

, 나는

  • -applicationShouldTerminateAfterLastWindowClosed
  • 응용 프로그램이 때를 닫 즉이 작품 YES 반환

      대리자에 추가 빨간색 x, 의 클릭 수를 사용했으며 사용자는 추후 더 이상 앱을 다시 시작할 수 없습니다.

      구체적인 문서 및 작업 코드 예제에 대한 설명과 설명이 도움이 될 것입니다.

      모두의 루디

    답변

    2

    "사용자가 도크 또는 바탕 화면에서 아이콘을 두 번 클릭하면 창을 다시 열지 않습니다. 이는 일반 Mac 동작과 유사하지만 사용자에게는 혼란 스럽습니다."

    이 경우 창을 다시 열려면 applicationShouldHandleReopen:hasVisibleWindows:을 구현하십시오. 모든 윈도우를 닫은 후 사용자가 도크 아이콘을 클릭하면 윈도우를 여는 것과 관련하여 Mac과 비슷한 방식의 것은 없습니다. 많은 응용 프로그램이이를 수행하며 대리자는 해당 동작을 지원하기 위해 특별히 존재합니다.

    +0

    예, 저는 이와 같은 reopen을 처리하는 것이 Mac과 비슷한 또 다른 방식이라고 동의합니다. 물론 그의 응용 프로그램이 무엇인지에 달려 있습니다. 문서 기반 앱인 경우 앱을 실행 상태로 유지하고 다시 열기를 처리하는 것이 가장 좋습니다 (텍스트 편집기). 그것은 작은 유틸리티 애플 리케이션, 나는 그것을 가까이에 종료 말하고, 사용자가 응용 프로그램을 다시 시작하게하십시오. – kperryua

    +0

    예, 이것은 작은 유틸리티 앱입니다. 앞서 언급했듯이 '닫을 때 종료'를 구현하고 -applicationShouldTerminateAfterLastWindowClosed를 사용하여 대리자를 사용하여 사용자가 앱을 다시 시작하도록하는 데 성공했습니다. 제게 적합하지 않은 것은 '모든 창을 닫은 후 사용자가 도크 아이콘을 클릭하면 창 열기'를 구현 한 것입니다. smorgan과 kperryua에게 감사드립니다. – rudifa

    1

    첫째, 창 가까이에있는 응용 프로그램을 종료의 당신의 "대안"동작은 아마 당신의 상황에 선호되는 방법입니다. 사용자가 창을 닫을 수 없을 때 사용자가 혼란 스러울 수 있습니다.

    정말로 창을 닫지 않게하려면 IB의 창에서 닫기 제어를 비활성화하지 않는 것이 어떻습니까?

    +0

    귀하의 제안에 따라 나는 IB에서 클로즈드 컨트롤을 비활성화했습니다. 이제 빨간색 x가 회색으로 표시되고 사용자는 오렌지색 '-'버튼으로 앱 창을 최소화하거나 Quit로 앱을 닫을 수 있습니다. 이것은 사용자에게 분명합니다. – rudifa