2010-02-23 3 views
3

문서에서 두 제목이 같은 경우 NSPopUpButton에 두 개의 메뉴 항목을 추가 할 수 없다고합니다. [popupButton 메뉴]에 메뉴 항목을 추가하려고했지만 행운이 없었습니다. 또한 새 메뉴를 만들고 항목을 추가 한 다음 [popupButton setMenu : newMenu]를 사용하려고했으나 없습니다. 메뉴에는 항상 이름 당 하나의 항목 만 표시됩니다.NSPopUpButton (NSMenu)에 동일한 제목의 여러 메뉴 항목을 추가하는 방법은 무엇입니까?

iTunes에서 스마트 재생 목록을 만들려고 시도하는 경우 왼쪽 팝업 버튼에서 "Playlist"를 선택하고 중간에서 "="를 선택하면 오른쪽에서 메뉴 항목이 보관됩니다 iTunes에있는 모든 재생 목록에 동일한 제목이있는 경우에도 마찬가지입니다. 그래서 그들은 그것을 어떻게합니까?

답변

0

나는 정확한 문제를 가지고 있으며 쉽게 해결되었습니다. 단추 항목을 조작하기 위해 NSPopUpButton 메서드 (예 : -addItemWithTitle :)를 사용하는 대신 NSArrayController을 추가하고 항목을 배열 컨트롤러에 추가했습니다. 그런 다음 바인딩을 사용하여 컨트롤러와 팝업 버튼을 바인딩하고 이제는 동일한 제목의 항목을 표시합니다.

는 바인딩을 수행합니다

  1. 는 IB에 NSArrayController를 추가합니다.
  2. "선택된 인덱스"를위한 NSPopUpButton 바인딩 배열에 설정 "컨트롤러 키"인 "arrangedObjects"
  3. 으로 배열 컨트롤러에"내용"에 대한 NSPopUpButton 바인딩을 설정 컨트롤러 "컨트롤러 키""selectionIndex"
  4. [선택 사항] 배열 cont 롤러에 넣고 클래스 이름을 아이템의 속성과 같은 속성으로 설정합니다. NSString 또는 기본값 인 NSMutableDictionary을 사용하고 아래 상자에 키를 추가하면 사전에 항목을 포장하고 팝업 버튼에 표시 할 항목과 배경에 넣고 싶은 항목에 대한 다른 키를 추가 할 수 있습니다 . 팝업 버튼에 반영 할 사전의 키를 설정하려면 "내용"의 팝업 버튼 바인딩으로 가서 "모달 키 경로"을 어레이 컨트롤러 속성에 추가 한 키로 설정하십시오.
5

addItemWithTitle : 및 addMenu :와 같은 NSPopUpButton 메서드는 중복 된 이름을 허용하지 않지만 같은 제목의 항목을 가질 수는 있습니다. NSMenuItem 자체에 이름을 설정하기 만하면됩니다. 당신은 문자열의 배열이있는 경우 예를 들어

(재생 목록 이름처럼 아마도) 당신은 다음과 같이 그것을, 팝업 버튼을 추가 할 및 확인 중복에있을 것입니다 만들고 싶어 :

NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil]; 

for (NSString* item in items) 
{ 
    [popupButton addItemWithTitle:@"blah"]; 
    [[popupButton lastItem] setTitle:item]; 
    [[popupButton lastItem] setTarget:self]; 
    [[popupButton lastItem] setAction:@selector(something:)]; 
} 
+0

Ken이 방법을 사용해 보았습니다. 그러나 결과는 같습니다. 어쩌면 내 팝업 버튼이 NSPredicateEditorRowTemplate에 있고 그 술어 편집기가 게시물을 처리했기 때문일 수 있습니다. 이 방법이 작동하는 소스 코드를보고 싶습니다. –

+0

내 앱 중 하나에서이 작업을 수행하고 있습니다. 그것이 바로 위에 단순화 된 코드입니다. 메뉴에 사용자 이름이 지정된 사전 설정 설정 및 복제본이 허용되어야하므로이 방법으로해야했습니다. 프리디 케이트 에디터를 사용한 적은 한번도 없었습니다. 죄송합니다! –

+0

추신 : 제대로 작동하는지 보려면 팝업 버튼을 사용하여 새 테스트 프로젝트를 만든 다음 해당 코드를 붙여 넣으십시오. –

2

addItemWithTitle: 대신에 수동으로 NSMenuItem을 만들고 메뉴에 직접 추가 할 수 있습니다. 이렇게하면 원하는 타이틀을 지정할 수있을뿐만 아니라 메뉴의 아무 위치 에나 삽입 할 수 있습니다.

NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""]; 

[newItem setTarget:self]; 
[[popupButton menu] addItem:newItem]; 
[newItem release]; 
+0

이렇게해도 문제가 해결되지 않습니다. NSPopUpButton은 NSPopUpButton의 addItemWithTitle : title이 사용 된 것과 똑같이 동작합니다. 각 고유 타이틀에 대해 하나의 항목이 표시됩니다. – szayat

+0

이것은 나를 위해 완벽하게 작동했습니다. –