2012-04-19 2 views
0

나는 NSMenu (응용 프로그램 도킹 메뉴)과 같은 항목으로 여러 항목을 가지고 있습니다.부모 메뉴에서 NSMenuItem (발신자) 색인을 가져옵니다.

컨테이너 메뉴에서 보낸 사람 항목 (작업을 실행하는 항목)의 인덱스를 어떻게 알 수 있습니까? (그게 중복 될 수도 있기 때문에 title에서 흥미롭지 않습니다.)

그게 제가 시도한 것이지만, 그것은 0 (영)을 계속 돌려줍니다.

- (void)myAction:(id)sender 
{ 
    NSMenuItem* mi = (NSMenuItem*)sender; 

    int index = [[[mi parentItem] submenu] indexOfItem:mi]; 

    NSLog(@"Clicked item with index : %d",index); 
} 

아이디어가 있으십니까? (더 좋은 방법이 있습니까?)

+0

가 왜 다른 메뉴 항목이 전화하지 귀하의 경우에, 당신은 아마 메뉴 항목을 참조하는 문서를 사용합니다 다른 행동? –

+0

@RobKeniger 글쎄, 메뉴는 동적으로 채워져 있습니다. 가변 내용 (가변 개수의 요소) ... 다소 비슷한 방식으로 처리됩니다 ... (실제로 활성 문서 이름 목록 - NON-traditional 문서 기반 앱) –

답변

3

메뉴 항목 'representedObject을 사용하여 앱의 일부 객체에 대한 참조를 저장할 수 있습니다. 당신은 다음과 같이 동작에서 개체에 액세스 할 수

[aMenuItem setRepresentedObject:yourDocument]; 

:

- (void)myAction:(id)sender 
{ 
    NSMenuItem* mi = (NSMenuItem*)sender; 
    YourDocument* doc = (YourDocument*)[sender representedObject]; 
    //do something with doc 
} 
+0

흥미로운 아이디어; 물론 메뉴 루틴 뒤에있는 논리를 근본적으로 변경해야합니다. 나는 아마 그것을 시도를 줄 것이다! 고마워요! ;-) –

+0

마침내 생성시에 각 NSMenuItem의'keyEquivalent' 속성에'index' 번호를 전달하여 만들었습니다. ;-) –

+4

그것은 'keyEquivalent'를 남용하는 것입니다. 단지 인덱스를 원한다면 인덱스를 NSNumber로 저장 한 다음 그 NSNumber 객체를 메뉴 아이템의'displayedObject'로 저장하는 것이 낫습니다. –

관련 문제