2012-03-08 2 views
4

나는 동적으로 메뉴를 기반으로 배열을 기반으로하며 Finder에서 폴더를 여는 IBAction에 하위 메뉴가 연결되어 있습니다. 열리는 폴더는 초기 배열에있는 개체의 속성을 기반으로합니다.NSMenu 액션에 변수를 전달할 수 있습니까?

동적으로이 배열을 생성 할 때 NSMenuItem 동작을 IBAction에 연결하고이 디렉토리 변수를 전달하는 방법이 있습니까?

또는 IBAction으로 이동하여 배열에 대해 NSMenuItem을 참조하여 디렉토리를 해결해야합니까?

person = [[Person alloc] init]; 
// person is assigned 
subMenu = [[NSMenu alloc] init]; 
[subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""]; 

답변

3

는 액션은 액션을 호출 한 객체를 전송하도록되어는 "(id) sender"매개 변수를 취합니다.

그러나 작업 방법이 어떤 Objective C 객체 (그리고 싱글 톤이 아닌)에 있으면 작업에서 해당 객체의 속성을 쉽게 참조 할 수 있습니다.

희망적으로 이것은 사용자에게 분명하거나 잘 모르겠 으면 IBAction 코드를 약간 표시하고 코드의 수명 및 선언 방법을 알려주십시오.

3

이것은 내가 본 후입니다.

NSMenuItem *menuItem; 
menuItem = [subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""]; 
[menuItem setRepresentedObject:person]; 

그런 다음 내 IBAction를에 내가 디렉토리 추출하기 위해이 같은 짓을 :

- (IBAction)openDirectory:sender { 
    Person *person = [sender representedObject]; 
    NSLog(@"directory: %@",person.directory); 
+0

아, 그래서 당신은 (객체의 속성에 액세스) 내 솔루션을 사용했다. 좋은! –

관련 문제