2012-03-08 57 views
4

我是根據數組動態地構建菜單的,並有一個子菜單鏈接到一個IBAction,它在Finder中打開一個文件夾。它打開的文件夾基於我初始數組中的對象的屬性。可以將變量傳遞給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

啊,所以你沒有使用我的解決方案(訪問對象的屬性)。好! – 2012-03-08 08:14:12

相關問題