2010-01-18 3 views
8

메뉴 처리의 기본 사항을 배우려는 중입니다. 내 테스트 응용 프로그램의 메뉴 모음에는 "TestApp", "File"및 "Help"의 3 가지 메뉴가 있습니다. 나는 단순히 말 호출하여, 완전히이 메뉴를 제거 할 수 있습니다 찾을 :응용 프로그램 메뉴 항목 비활성화/활성화

NSMenu* rootMenu = [NSApp mainMenu]; 
[rootMenu removeItemAtIndex:2]; 

그러나, 나는 오직 일시적으로 (그들을 밖으로 회색)을 사용하지 않을 것입니다. 이 작업을 수행하는 똑같이 간단한 방법이 있습니까?

답변

7

질문에 대한 오해가있을 수 있지만 시스템 메뉴 막대 (예 : "파일"메뉴가 회색으로 표시됨)와 함께 나타나는 메뉴의 실제 제목을 회색으로 표시하려면 원하는 것처럼 보입니다. 그것도 가능성이 있는지 확실하지 않습니다, 그러나 그것은 확실히 Apple Human Interface Guidelines에 반하는 :

메뉴의 제목이 메뉴의 모든 명령이 사용할 수 없습니다 (흐리게)에서 동시에있는 경우에도 undimmed 표시됩니다. 이 현재 사용 가능한지 여부와 관계없이 항상 메뉴의 콘텐츠를 볼 수 있어야합니다.

그래서 문제의 실제 해결책은 응용 프로그램이 특정 상태에있을 때 특정 메뉴 내의 모든 메뉴 항목을 회색으로 표시하는 것입니다. 이렇게하려면 implement the NSUserInterfaceValidations protocol. - (BOOL)validateUserInterfaceItem: 메소드 만 구현하면됩니다. 일반적으로이 메서드를 구현할 때 유효성 검사를받는 사용자 인터페이스 항목의 선택기를 선택하고 활성화해야하는 경우 YES를 반환하고 그렇지 않으면 NO (메뉴 항목이 회색으로 표시됨)를 반환합니다.

+0

예, 올바르게 이해했습니다. CJ. 필자는 각각의 항목보다는 "파일"및/또는 "편집"메뉴 자체를 어둡게하려고 노력했다. 애플의 휴먼 인터페이스 지침에서 중요한 부분을 알지 못했다. 그런 식으로. - (BOOL) validateUserInterfaceItem : 메소드를 코드에 포함 시켰으며 완벽하게 작동합니다. 그런 간단한 해결책. 대단히 감사합니다 :-) – Bender