2014-09-12 7 views
0

사용자가 왼쪽 화살표를 클릭 할 때 메뉴로 나타나는 몇 가지 범주를 표시하려는 NSSearchField 컨트롤이 있습니다. 애플의 문서를 읽은 후에 나는 약간의 아이디어를 얻었다. 다음은 내 코드입니다.NSSearchField 범주 메뉴 상태

// .h 
@interface AppDelegate : NSObject { 
    IBOutlet NSSearchField *searchField; 
} 

// .m 
- (void)awakeFromNib {  
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:[self window]]; 
    [window setContentBorderThickness:22.0 forEdge:NSMinYEdge]; 

    NSMenu *cellMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Search Menu",@"Search Menu title")]; 
    NSMenuItem *item; 
    item = [[NSMenuItem alloc] initWithTitle:@"Title" action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; 
    [item setTarget:self]; 
    [item setTag:1]; 
    [cellMenu insertItem:item atIndex:0]; 

    item = [[NSMenuItem alloc] initWithTitle:@"Username" action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; 
    [item setTarget:self]; 
    [item setTag:2]; 
    [cellMenu insertItem:item atIndex:1]; 
    id searchCell = [searchField cell]; 
    [searchCell setSearchMenuTemplate:cellMenu]; 
} 

- (IBAction)setSearchCategoryFrom:(NSMenuItem *)menuItem { 
    if ([menuItem tag] == 0) { 

    } 
    else { 

    } 
} 

그리고 아래 스크린 샷은 결과를 보여줍니다. 이제는 선택 상태 중 어느 것이 든 선택 상태를 1로 설정해야 확인 표시가 나타납니다. 어떻게해야합니까?

도움 주셔서 감사합니다. 내 NSSearchField에서 : (제목, 본문 또는 ... 검색 예) 나는 것

enter image description here

답변

0

다음과 같은 작업을해야합니다 :이 코드입니다.

// .h 
@interface AppDelegate : NSObject { 
    IBOutlet NSSearchField *searchField; 
    NSMenu *searchMenu; 
} 

// .m 
@implementation AppDelegate { 
    NSInteger lastSearchSelection; 
} 

- (void)awakeFromNib {    
    NSMenu *cellMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Search Menu",@"Search Menu title")]; 
    NSMenuItem *item; 
    item = [[NSMenuItem alloc] initWithTitle:@"Title" action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; 
    [item setTarget:self]; 
    [item setTag:1]; 
    [cellMenu insertItem:item atIndex:0]; 

    item = [[NSMenuItem alloc] initWithTitle:@"Username" action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; 
    [item setTarget:self]; 
    [item setTag:2]; 
    [cellMenu insertItem:item atIndex:1]; 
    id searchCell = [searchField cell]; 
    [searchCell setSearchMenuTemplate:cellMenu]; 
} 

- (IBAction)setSearchCategoryFrom:(NSMenuItem *)menuItem { 
    [[[sender menu] itemWithTag:lastSearchSelection] setState:NSOffState]; 
    [sender setState: NSOnState]; 
    lastSearchSelection = [sender tag]; 
} 
1

는 카테고리 메뉴를 추가 할 수 있습니다. 메뉴를 성공적으로 설정했지만 메뉴 항목을 NSOffState로 설정하려고하면 문제가 발생합니다. 메뉴를 선택할 때 이전에 선택한 카테고리를 해제해야합니다.

- (IBAction) menu_selectNewFilter:(id) sender { 

NSMenuItem *m = [searchMenu itemWithTag: selectedFilter]; 
[m setState: NSOffState]; 
NSLog(@"Disabled %@ %d",[m title],[m tag]); 

NSLog(@"Activate %@ %d",[sender title],[sender tag]); 
[sender setState: NSOnState]; 

selectedFilter = [sender tag]; 

}

- (IBAction)setSearchCategoryFrom:(NSMenuItem *)menuItem { 
    [[[sender menu] itemWithTag:lastSearchSelection] setState:NSOffState]; 
    [sender setState: NSOnState]; 
    lastSearchSelection = [sender tag]; 
} 
+0

감사합니다. 나는 심지어 searchMenu와 selectedFilter가 무엇인지도 모른다. –

+0

http://blog.jameskyle.org/2010/10/toggling-nsmenuitems-for-a-nssearchfield-menu-template/ 이것을 참조 할 수 있습니다. –

+1

감사합니다. 그거야. –