nstoolbaritem에 팝업 메뉴를 추가하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
Nstoolbaritem에서 팝업 메뉴를 열려고합니다. 나는 다음을 시도했다 이것 예를 들어 NSToolbar와 nstoolbaritem은 nsveject가 아닌 nsobject에서 상속되기 때문에 해당 클래스 방법을 사용할 수 없습니다.
사용자 정의보기를 만드는 것 외에도 nstoolbaritem에서 팝업 메뉴를 열는 가장 좋은 방법은 무엇입니까?
해결책
참고 :이 게시물은 오래 걸렸지 만, 그냥 탐색하고 있으며 이것에 대한 쉬운 방법이 있으므로 다른 사람이 그것을 살펴볼 때 대답 할 것이라고 생각했습니다. 팝업 버튼을 라이브러리에서 인터페이스 빌더의 도구 모음으로 직접 드래그 할 수 없다는 것을 알았습니다. 그러나 팝업 버튼을 창에서 도구 모음으로 드래그 할 수 있습니다. 그래서 먼저 창에서 팝업 버튼을 만든 다음 툴바로 드래그합니다 ... 작동합니다! 다른 개체와 동일합니다.
다른 팁
기본적으로, 당신은 an과 같은 것을 만듭니다 NSButton
그것은 있습니다 NSMenu
그것에 첨부 한 다음 사용하십시오 NSToolbarItem
'에스 setView:
도구 모음에 버튼을 포함시키는 메소드.
원하는 것처럼 메뉴로 IB에서 NSVIEW를 만듭니다. 그런 다음 창 컨트롤러에서 다음과 같은 코드를 추가하십시오.
// This assumes you have a window property pointing to the window to which you'll
// add the toolbar. It also assumes you've connected the NSView to add to the
// toolbar to a member called toolbarView.
- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar {
return [NSArray arrayWithObject:@"myToolbarMenu"];
}
- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar {
return [self toolbarAllowedItemIdentifiers:toolbar];
}
- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar
itemForItemIdentifier:(NSString*)str
willBeInsertedIntoToolbar:(BOOL)flag
{
if ([str isEqualToString:@"myToolbarMenu"] == YES) {
NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str];
[item setView:toolbarView];
[item setMinSize:[toolbarView frame].size];
[item setMaxSize:[toolbarView frame].size];
return [item autorelease];
}
return nil;
}
- (void)windowDidLoad {
NSToolbar* toolbar = [[NSToolbar alloc] initWithIdentifier:@"myToolbar"];
[toolbar setDelegate:self];
[self.window setToolbar:[toolbar autorelease]];
}
도구 모음 항목의 실제 팝업 버튼을 원한다면 NSPOPUPBUTTON을 도구 모음 항목의보기로 설정하십시오.
Interface Builder 3.2.1 (이 기능이 실제로 소개 된 시점은 모르겠습니다)에서는 NIB 창의 계층 구조 목록의 도구 모음으로 드릴링하고 라이브러리 팔레트에서 팝업 버튼을 끌 수 있습니다. 목록의 도구 모음. IB는 버튼을 도구 모음 항목으로 래핑합니다.
가정합니다 menu
이다 NSMenu
객체와 sender
a NSToolbarItem
, 그러면 당신이해야 할 일은 sender.view
메뉴를 보여줍니다. 이미 설정 한 경우 다른보기를 추가 할 필요가 없습니다. NSToolbarItem
인터페이스 빌더를 통해.
[NSMenu popUpContextMenu:menu
withEvent:[NSApp currentEvent]
forView:sender.view];