2013-04-19 1 views
0

내 코코아 앱을 비밀번호로 보호하는 기능을 구현하려고합니다. 따라서 AppDelegate에서 암호가 창에 올바르게 입력되면 NSApp runModelforWindow 메서드를 호출하여 기본 응용 프로그램 창을 표시합니다.메인 메뉴 (NSMenu)를 일시적으로 숨기는 방법은 무엇입니까?

사용자가 암호를 변경할 수있는 환경 설정을 제외하고는 제대로 작동합니다. 즉, 사용자의 해킹을 막기 위해 암호가 올바르게 입력 될 때까지 기본 메뉴를 숨겨야합니다.

removeItemAtIndex를 사용하여 특정 메뉴 항목을 제거하거나 프로그램에서 환경 설정 창을 표시하는 메소드를 호출하도록 대상 작업을 설정하지 않으려합니다. 대신 [NSApp mainMenu]를 임시로 숨기고 싶습니다. 나는 그것을 찾았고 그것을 숨기기 위해 setHidden : YES와 같은 어떤 메소드도 찾을 수없는 것처럼 보였다.

내가 시도 [[NSApp에는 mainMenu] cancelTracking]하지만이 작업

이 작업을 수행 할 수있는 쉬운 방법이 존재하지 않습니다?

답변

2

NSApp에서 -setPresentationOptions: 메서드를 사용하여 메뉴 막대와 Dock을 포함하여 표준 OS UI의 많은 부분을 숨기거나 표시 할 수 있습니다. 당신이 함께 모두 메뉴 표시 줄과 독을 숨길해야합니다 :

/* Hide */ 
[NSApp setPresentationOptions:[NSApp presentationOptions] | 
           NSApplicationPresentationHideMenuBar | 
           NSApplicationPresentationHideDock]; 

/* Show */ 
[NSApp setPresentationOptions:[NSApp presentationOptions]^
           NSApplicationPresentationHideMenuBar^
           NSApplicationPresentationHideDock]; 

이 꽤 혼란 UI 경험을 생각입니다. 암호 대화 상자가 화면에 표시되어있는 동안 사용자가 액세스하지 못하도록하려는 메뉴 항목이나 UI 요소를 비활성화하는 것을 고려하십시오.

+0

의견을 보내 주셔서 감사합니다. 그러나이 문제를 해결할 다른 방법을 찾은 것 같습니다. – Josh

0

불행히도, 메인 메뉴를 숨기는 쉬운 방법은 없습니다. 항상 표시되거나 항상 숨겨집니다 (info.plist 플래그에 따라 다름). Dock 아이콘뿐입니다. 이에 대해서는 LSUIElement를 참조하십시오. 처음에는 숨겨져 있지만 런타임에는 숨기거나 표시 할 수있는 좋은 방법이없는 경우이 메뉴를 표시하는 트릭이 있습니다.