모든 셀에 대해 사용자 지정 배경이있는 드롭 다운 메뉴가있는 메뉴를 만들려고합니다. 먼저 NSPopUpButton을 적용하려고했지만 셀 배경 이미지를 변경할 수있는 방법을 찾지 못했습니다. setImage 사용 : 텍스트를 배경의 오른쪽으로 슬라이드합니다. 다음으로 NSComboBox에서 멈추었지만 화살표 단추를 바꿀 수있는 방법을 찾지 못했습니다. 누군가가 아이디어로 도움을받을 수 있습니까? 다음 단계는 사용자 정의 컨트롤러를 만드는 것이지만 이미 완료된 것을 사용하고 싶습니다.NSPopUpButton, 비슷한 메뉴 NSComboBox
답변
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
}
귀하의 질문을 정확하게 이해할 수 있을지 잘 모르겠습니다. UI의 임의의 위치에 메뉴를 표시하려면 NSMenu가이를 달성하기위한 편리한 방법을 제공합니다. + popUpContextMenu:withEvent:forView:
, + popUpContextMenu:withEvent:forView:withFont:
및 – popUpMenuPositioningItem:atLocation:inView:
에 대한 설명서를보고 필요에 가장 적합한 것을 찾으십시오. 이렇게하면 원하는 위치에 메뉴를 표시 할 수 있습니다.
대신 메뉴 안에 임의의 콘텐츠를 표시하려면 NSMenuItem
의 - setView:
문서를보십시오. 이렇게하면 메뉴 안에보기를 삽입 할 수 있습니다. 위의 메뉴 표시 방법과 함께 원하는 곳마다 "PopOver"요구에 맞는 모든 종류의 솔루션을 만들 수 있습니다.