【问题标题】:NSSearchField Category Menu StateNSSearchField 类别菜单状态
【发布时间】:2014-09-12 04:25:59
【问题描述】:

我有一个 NSSearchField 控件,我想在其中显示一些类别,当用户单击左侧的箭头时,这些类别将显示为菜单。在阅读了 Apple 的文档后,我有了一些想法。以下是我的代码。

// .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,以便出现一个复选标记。我该怎么做?

感谢您的帮助。

【问题讨论】:

    标签: objective-c macos cocoa nsmenuitem nssearchfield


    【解决方案1】:

    我想添加一个类别菜单(例如:搜索主题、正文或...) 在我的 NSSearchField 中。我已成功设置菜单,但有一个 如果我尝试将菜单项设置为 state: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];
    }
    

    【讨论】:

    • 谢谢。不过,我什至不知道 searchMenu 和 selectedFilter 是什么。
    • blog.jameskyle.org/2010/10/…你可以参考这个
    • 谢谢。差不多了。
    • 哇...我明白了。
    【解决方案2】:

    以下应该可以工作。

    // .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];
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多