Заполните NSMenu из NSArray с NSMenuItems - нужны альтернативные предложения - PullRequest
0 голосов
/ 24 августа 2011

Итак, у меня есть следующий код:

- (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
}

Это динамически генерирует элементы подменю из NSArray и позволяет мне открывать URL в зависимости от выбранного варианта (в определенном браузере):

-(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];

}

У меня такой вопрос, хотя это, кажется, работает отлично, я хотел бы установить образ для NSMenu supportLinkItem, вот как выглядит мой .h файл:

IBOutlet NSMenu *supportLinkItem;
NSMenuItem *supportLinkArrayItem;

А выход связан с элементом подменю, так как я создал его (родительская? -Терминация?) Как NSmenu, он не позволяет мне обращаться к нему как - (void) setImage: (NSImage *) Метод menuImage не является NSMenuitem. Теперь я думаю, что, может быть, я только что сделал что-то странное, поскольку, технически, когда вы перетаскиваете «Элемент подменю» в конструктор интерфейса, это NSMenuItem, а не NSMenu, снова мой код работает безупречно, за исключением моей неспособности установить изображение меню, Который я думаю, что нет смысла, но, возможно, есть аналогичный способ чтения из NSArray для заполнения набора подменю.

1 Ответ

0 голосов
/ 25 августа 2011

Мне удалось решить эту проблему, обновив изображение в файле пера, так как перо считает его nsmenuitem.

enter image description here

...