2011-08-24 606 views
0
에게 필요

그래서 나는 다음과 같은 코드가이 동적으로있는 NSArray에서 하위 메뉴 항목을 생성하고 선택에 따라 URL을 열고 나를 수NSMenuItems와 함께있는 NSArray에서 NSMenu 채우기 - 대체 제안

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

을 그 (특정 브라우저에서) 선정되었다 :

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

콘센트는 하위 메뉴 항목에 연결되어 있습니다. -terminology?)를 NSmenu로 사용하면 NSMenuitem이 아닌 - (void) setImage : (NSImage *) menuImage 메서드로 액세스 할 수 없습니다. 이제는 어쩌면 내가 뭔가 이상한 짓을 한 것 같아요. 기술적으로 "Sub Menu Item"을 인터페이스 빌더로 드래그하면 NSMenu가 아닌 NSMenuItem이됩니다. 다시 말하면 내 코드는 메뉴의 이미지를 설정할 수 없다는 것을 제외하고는 완벽하게 작동합니다. 어느 날 생각도하지만, NSArray에서 하위 메뉴 집합을 채우는 비슷한 방법이있을 것입니다.

답변

0

nib가 nsmenuitem을 생각할 때 nib 파일의 이미지를 업데이트하여이 문제를 해결할 수있었습니다.

enter image description here