2011-11-27 40 views
0

我想帮助您将函数绑定到NSMenuItem。NSMenuItem目标和行动

我有一个对象Tab的数组,我想为每个Tab对象绘制一个NSMenuItem。我成功绘制并添加了NSMenuItem,但我希望当用户单击该项目时,它会调用有关Tab对象的实例方法(void)play。我已经尝试了下面的代码,但它似乎不工作,因为菜单项保持灰色。

-(void)buildInterface: (NSMutableArray *) tabArray ; 
{ 
    for (Tab *currentTab in tabArray) 
    { 
     NSMenuItem *item = [[NSMenuItem alloc] init]; 
     [item setTitle:@"test"]; 
     [item setTarget:currentTab]; 
     [item setAction: @selector(play:)]; 

     [statusMenu insertItem:item atIndex:1]; 
    } 
} 

这里是Tab.h

#import <Foundation/Foundation.h> 
#import "Safari.h" 
#import "GoogleChrome.h" 

    @interface Tab : NSObject{ 

     NSString *plistKey; //key pour le dico de la plist 
     NSString *navigateur; //type du navigateur 
     NSString *titreTab; //titre de la page Web concernée (hors transmission information) 
     NSString *idSite; //nom en toute lettre et mis en forme du site 
     NSString *URL; //URL de l'onglet 
     NSInteger *tempsChanson; //durée de la chanson courante en seconde 
     NSInteger *tempsPlayed; //temps déjà joué en secondes 
     NSInteger *tabIndex; //index de l'onglet 
     SafariTab *tabObjectSafari; //objet de l'onglet concerné, safari 
     SafariWindow *tabWindowSafari; //fenêtre de l'onglet conderné, safari 
     SafariApplication *applicationSafari; 
     GoogleChromeTab *tabObjectChrome; 
     GoogleChromeWindow *tabWindowChrome; 
     GoogleChromeApplication *applicationChrome; 

    } 
@property(readwrite, copy) NSString *titreTab; 
@property(readwrite, copy) NSString *plistKey; 
@property(readwrite, copy) NSString *idSite; 
@property(readwrite, copy) NSString *URL; 
@property(readwrite, copy) NSString *navigateur; 
@property(readwrite, retain) SafariTab *tabObjectSafari; 
@property(readwrite, retain) SafariWindow *tabWindowSafari; 
@property(readwrite, retain) SafariApplication *applicationSafari; 
@property(readwrite, retain) GoogleChromeTab *tabObjectChrome; 
@property(readwrite, retain) GoogleChromeWindow *tabWindowChrome; 
@property(readwrite, retain) GoogleChromeApplication *applicationChrome; 

//initialisation d'un onglet Safari 
-(id)initwithSafari: (SafariWindow *) passedWindow tab: (SafariTab *)passedTab application:(SafariApplication *)safariApplication dictionnaryKey:(NSString *) plistKey; 

//TODO initialisation d'un onglet avec Google Chrome 
-(id)initwithChrome: (GoogleChromeWindow *) passedWindow tab: (GoogleChromeTab *)passedTab application:(GoogleChromeApplication *)chromeApplication dictionnaryKey:(NSString *) plistKey; 

-(void)play; 
+(NSArray *)isControlabe: (SafariTab *) passedTab; 

@end 

这里是调用该函数 http://imageshack.us/photo/my-images/3/capturedcran20111127205.png/ (我没有足够的声誉对不起)后,链接的图片显示结果。

回答

1

您正在使用[item setAction: @selector(play:)];需要功能-(void)play:(id)sender;。您应该删除选择器中的冒号,以便您可以使用功能-(void)play;

+0

非常感谢。有效。 – Hugo