2014-09-12 6 views
0

У меня есть элемент управления NSSearchField, где я хочу показать несколько категорий, которые должны отображаться в виде меню, когда пользователь нажимает на стрелку слева. После прочтения документации Apple, я получил некоторую идею. Ниже приведен мой код.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, чтобы появилась галочка. Как мне это сделать?

Благодарим за помощь.

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

Я хотел бы добавить меню категорий (например: поиск Subject, Body или ...) в моем NSSearchField. Я успешно установил меню, но есть проблема , если я попытаюсь установить элемент меню, чтобы указать: 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

Спасибо. Это близко. –