2009-09-30 2 views
3

NSToolbarItem에서 팝업 메뉴를 열려고합니다. 내가 시도한 this 예제를 따라했지만 NSToolbar 및 NSToolbarItem NSObject 및 NSView에서 상속하기 때문에 클래스 메서드를 사용할 수 없습니다.NSToolbarItem에 팝업 메뉴를 추가하는 방법은 무엇입니까?

사용자 지정보기를 만드는 것 외에 NSToolbarItem에서 팝업 메뉴를 여는 가장 좋은 방법은 무엇입니까?

답변

3

FYI :이 게시물은 오래되었지만 방금 브라우징 중이므로 다른 사람이 검토 할 때 답을 줄 수있을 것이라고 생각했습니다. 라이브러리에서 인터페이스 빌더의 도구 모음으로 직접 팝업 버튼을 드래그 할 수 없다는 것을 발견했습니다. 그러나 창에서 도구 모음으로 팝업 단추를 끌 수 있습니다. 그래서 창에 팝업 버튼을 만든 다음 툴바로 끌어다 놓으면 ... 작동합니다! 다른 개체와 동일합니다. menu 가정

+0

녹색 체크 표시가있을 때까지는 아무 것도 끝나지 않습니다. ☺ 3.2.1에서 제안한 방식대로 할 수 없었기 때문에 내가했던 방식을 포함하도록 대답을 편집 할 것입니다. –

+0

3.2.1에서는 팝업 버튼을 라이브러리의 툴바로 직접 드래그 할 수 있습니다. 그러나, 나는 여전히 창에서 도구 모음으로 드래그 할 수 있습니다. 그렇게하려면 열려있는 경우 "완료"버튼을 클릭하여 툴바가 열려 있지 않은지 확인하십시오. 그런 다음 창에서 팝업 버튼을 툴바로 드래그하고 잠시 동안 가리 키십시오 ... 툴바에서 버튼을 놓을 수있는 곳에서 툴바가 열립니다. 이 방법은 도구 모음 메뉴가 아닌 창에 단추를 구성하는 것이 더 쉬워 보이기 때문에이 방법이 더 쉽다고 생각합니다. – regulus6633

+0

regulus6633 : 아, 구성 도구 모음 시트로 끌어 놓으십시오! 나는 그것을 IB ("무엇을 '완료'버튼이라고?)에서 가져올 수 있다는 것을 몰랐다. 이제 그 시트를 열었으므로 컨트롤을 라이브러리에서 라이브러리로 직접 끌 수 있습니다. 그리고 당신은 그것이 * 많이 쉬워 진다고 맞습니다. –

3

원하는대로 메뉴에서 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]]; 
} 
3

는 기본적으로, 당신이 그것에 연결된 NSMenu이있는 NSButton 같은 것을 만들 toolbarItem에있는 버튼을 포함 할 NSToolbarItemsetView: 방법을 사용하십시오 그런 다음 윈도우 컨트롤러, 다음과 같은 몇 가지 코드를 추가합니다.

+0

메뉴를 뷰에 추가하고 뷰를 툴바 항목에 추가하지 않는 이유는 무엇입니까? – ruipacheco

+0

@Rui가 내가 제안한 것 아닙니까? :/ –

3

툴바 항목에 대한 실제 팝업 버튼을 원하면 NSPopUpButton을 툴바 항목의보기로 설정하십시오.

Interface Builder 3.2.1 (이 기능이 실제로 도입 된시기는 알 수 없음)에서는 펜촉 창의 창의 계층 구조 목록에서 툴바를 드릴 다운하고 라이브러리 팔레트를 목록의 도구 모음에 추가하십시오. IB는 툴바 항목에 버튼을 표시합니다.

0

NSMenu 객체이며 sender은 당신이해야 할 모든 메뉴를 표시 할 sender.view 전달이다하는 NSToolbarItem입니다. Interface Builder를 통해 NSToolbarItem을 이미 설정 한 경우에는 다른보기를 추가 할 필요가 없습니다.

[NSMenu popUpContextMenu:menu 
       withEvent:[NSApp currentEvent] 
       forView:sender.view];