2011-08-24 1 views
0

J'ai donc le code suivant:Peupler un NSMenu d'un NSArray avec NSMenuItems - Besoin de suggestions alternatives

- (void)addSupportLinksMenuItems 
{ 
    NSString *subMenuTitle; 
    NSString *getURL; 
    if (!supportLinks) { 
     supportLinks = [[NSArray alloc] initWithArray:[settings objectForKey:@"supportLinks"]]; 

    } 
    for(NSDictionary *object in supportLinks){ 
     // A couple of Keys in the Dict inside the Array 
     subMenuTitle = [object objectForKey:@"subMenuTitle"]; 
     getURL = [object objectForKey:@"getURL"]; 
     NSInteger n = [ supportLinks indexOfObject:object]; 
     NSInteger menuTag = n +255; 
     //[ supportLinkItem setImag 
     supportLinkArrayItem = [supportLinkItem 
            insertItemWithTitle:subMenuTitle 
            action:@selector(openSupportLink:) 
            keyEquivalent:@"" 
            atIndex:n]; 

     // Set a menu tag to programatically update in the future 
     [ supportLinkArrayItem setTag:menuTag]; 
     [ supportLinkArrayItem setToolTip:getURL]; 
     [ supportLinkArrayItem setTarget:self]; 

    } 

    //supportLinkItem 
} 

Cela génère dynamiquement un des éléments du sous-menu à partir d'un NSArray et me permet d'ouvrir l'URL en fonction du choix qui a été sélectionné (dans un navigateur spécifique):

-(IBAction)openSupportLink:(id)sender 
{ 
    NSLog(@"Was passed Menu: %@",sender); 
    NSInteger menuTag = [sender tag]; 
    NSInteger n = menuTag - 255; 
    NSString *getURL = [[supportLinks objectAtIndex:n] objectForKey:@"getURL"]; 
    [self openPageInSafari:getURL]; 
} 

- (void)openPageInSafari:(NSString *)url 
{ 
    NSDictionary* errorDict; 
    NSAppleEventDescriptor* returnDescriptor = NULL; 
    NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource: 
            [NSString stringWithFormat: 
            @"\ 
            tell app \"Safari\"\n\ 
            activate \n\ 
            make new document at end of documents\n\ 
            set URL of document 1 to \"%@\"\n\ 
            end tell\n\ 
            ",url]]; 
    returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; 
    [scriptObject release]; 

} 

ma question est, alors que cela semble fonctionner très bien, je voudrais définir une image pour la NSMenu supportLinkItem, voici ce que mon fichier .h ressemble:

IBOutlet NSMenu *supportLinkItem; 
NSMenuItem *supportLinkArrayItem; 

Et la sortie est liée à l'élément de sous-menu, comme je l'ai créé (parent? -terminology?) en tant que NSmenu, il ne me permet pas d'y accéder en tant que - (void) setImage: (NSImage *) méthode menuImage car ce n'est pas un NSMenuitem. Maintenant je pense que je viens de faire quelque chose de bizarre ici, techniquement quand vous glissez le "Sous Menu" dans le constructeur de l'interface c'est un NSMenuItem pas un NSMenu, encore mon code fonctionne parfaitement, sauf pour mon incapacité à définir l'image du menu, Ce que je pense est un non, mais peut-être il ya une façon similaire de lire à partir d'un NSArray pour remplir un ensemble de sous-menus.

Répondre

0

J'ai été capable de résoudre ce problème en mettant à jour l'image dans le fichier nib car la nib pense que c'est un nsmenuitem.

enter image description here

Questions connexes