2009-06-13 4 views
2

사용자 정의보기가있는 상태 항목에 대한 NSMenu를 제공하는 NSPopUpButton이 있습니다. 팝업 버튼은 링크 목록을 표시합니다. 사용자가 목록에서 링크를 선택하면 링크가 사용자의 브라우저에 표시됩니다 (백그라운드에서).사용자가 메뉴 항목을 선택한 후에 NSPopUpButton을 열어 두는 방법은 무엇입니까?

당연히 사용자가 링크를 선택할 때마다 메뉴가 닫힙니다.

나는 이것을 바꾸고 싶다 : 사용자가 배경에서 열릴 수있는 다양한 링크를 클릭하는 동안 메뉴가 열려 있기를 바란다. 사용자가 다른 곳을 클릭하면 메뉴가 사라질 수 있습니다.

어떻게 수행 할 수 있습니까? NSMenuItem을 서브 클래스 화하고 마우스 클릭을 어떻게해야합니까? 튀어 나온 메뉴에 투명한 NSView를 오버레이하고 어떻게 든 클릭을 차단합니까? 나는 이러한 제안을 blithely하지만, 나는이 중 하나를 구현하는 데 어려움을 겪게 될 것이다 ... 올바른 방법에 대한 포인터가 인정 될 것이다.

답변

0

일반적으로 원래 의도보다 너무 먼 컨트롤을 구부리지 마십시오. 사용자는 팝업 버튼을 선택한 후 닫을 것을 기대합니다. 나는 NSPopUpButtonCell이 이런 식으로 행동하도록해야한다고 생각하지 않는다. 그렇게 할 경우 컨트롤을 서브 클래 싱하고 수정하여 향후 버전의 Mac OS X에서 변경/중단 할 수 있습니다. 또한 사용자가 메뉴를 작성한 후에 닫을 것이라고 생각하는 유용성 문제에 대해 걱정해야합니다 선택.

설명하는 메뉴 버튼처럼 작동하도록 NSView의 하위 클래스를 작성하는 것이 좋습니다. 사용자가 버튼을 클릭하면 NSBorderlessWindowMask를 스타일 마스크로 사용하여 테두리가없는 새 NSWindow를 만들려고합니다. 그 창의 내용보기는 메뉴 선택을 구현 한 다른 사용자 정의보기 여야합니다.

+0

의견을 보내 주셔서 감사합니다. 나는 확실히 NSView의 내 자신의 하위 클래스를 작성하는 것을 고려할 것이다. 그러나 NSPopUpButtonCell/NSMenu 조합과 함께 제공되는 모든 하위 메뉴, 이미지, 켜기/끄기 상태 등을 무료로 처리 할 수있는 왕실의 고통처럼 느껴지기도합니다. 내 자신의 NSView를 작성하는 것이이 작업을 수행하는 방법 중 하나임을 이해할 수 있지만 솔직히 NSPopUpButton을 정확히 모방하고 변경하려는 동작을 변경하면 바로 앞으로 나아갈 수 있다고 생각합니다. 그리고 "컨트롤을 너무 멀리 지나쳐 원래 의도대로 굴려 라!" 내 말은 결과가 같아서 의식에서는 것이 무의미한 것처럼 보입니다. – Dennis

1

메뉴를 사용하는 대신 축소 가능한 상자를 사용할 수 있습니다. 많은 응용 프로그램에서 볼 수 있습니다 (Apple), 그래서 이것이 여러 선택을위한 권장 스타일 가이드라고 생각합니다. 접을 수있는 상자는 펼침 버튼을 클릭하면 펼쳐지고 체크 박스가있는 테이블보기처럼 원하는 모든 항목이 무료로 제공됩니다. 이 상자 아래의보기는 상자를 방해하지 않도록이 경우 아래로 이동해야합니다. 공개 버튼을 다시 누르면

before

enter image description here

다시 원점 상자를 축소합니다. 이 효과는 메뉴 닫기와 비슷합니다.