2011-09-06 5 views
0

모든 셀에 대해 사용자 지정 배경이있는 드롭 다운 메뉴가있는 메뉴를 만들려고합니다. 먼저 NSPopUpButton을 적용하려고했지만 셀 배경 이미지를 변경할 수있는 방법을 찾지 못했습니다. setImage 사용 : 텍스트를 배경의 오른쪽으로 슬라이드합니다. 다음으로 NSComboBox에서 멈추었지만 화살표 단추를 바꿀 수있는 방법을 찾지 못했습니다. 누군가가 아이디어로 도움을받을 수 있습니까? 다음 단계는 사용자 정의 컨트롤러를 만드는 것이지만 이미 완료된 것을 사용하고 싶습니다.NSPopUpButton, 비슷한 메뉴 NSComboBox

답변

4

NSComboBox에서 화살표 단추를 사용자 지정하려면 NSComboBoxCell의 하위 클래스를 만들고 해당 셀을 사용하도록 콤보 상자를 설정해야합니다. IB에서 컨트롤을 구성했다면 쉽게 셀 클래스를 변경할 수 있습니다. 콤보 상자를 프로그래밍 방식으로 만드는 경우 NSComboBox의 하위 클래스를 만들고 + (Class)cellClass을 재정 의하여 해당 메서드에서 사용자 지정 NSComboBoxCell 하위 클래스를 반환하십시오.

도면 용으로 변경되었습니다. NSComboBoxCell 하위 클래스에서 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView을 재정의해야합니다.

(나는 - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView을 무시하려했지만이 제공하는 세포의 프레임은 단지 텍스트 입력 영역을 다루고 즉, 실제 버튼 그리기 영역의 짧은 중지됩니다.)

귀하의 사용자 정의 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 모양은 다음과 같습니다

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 
    [super drawWithFrame:cellFrame inView:controlView]; 

    // Constrain to the far right of the provided frame to draw the button 
    NSRect bounds = NSMakeRect(cellFrame.origin.x + cellFrame.size.width - cellFrame.size.height, cellFrame.origin.y, cellFrame.size.height, cellFrame.size.height); 

    // Draw your custom button inside the bounds rect 
} 
1

귀하의 질문을 정확하게 이해할 수 있을지 잘 모르겠습니다. UI의 임의의 위치에 메뉴를 표시하려면 NSMenu가이를 달성하기위한 편리한 방법을 제공합니다. + popUpContextMenu:withEvent:forView:, + popUpContextMenu:withEvent:forView:withFont:– popUpMenuPositioningItem:atLocation:inView:에 대한 설명서를보고 필요에 가장 적합한 것을 찾으십시오. 이렇게하면 원하는 위치에 메뉴를 표시 할 수 있습니다.

대신 메뉴 안에 임의의 콘텐츠를 표시하려면 NSMenuItem- setView: 문서를보십시오. 이렇게하면 메뉴 안에보기를 삽입 할 수 있습니다. 위의 메뉴 표시 방법과 함께 원하는 곳마다 "PopOver"요구에 맞는 모든 종류의 솔루션을 만들 수 있습니다.

관련 문제