首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSearchField不断调用方法

NSSearchField不断调用方法
EN

Stack Overflow用户
提问于 2012-05-17 09:27:56
回答 2查看 1.8K关注 0票数 4

我已经创建了一个存储最近搜索列表的NSSearchField。搜索字段连接到一个方法,该方法使用输入到搜索字段中的文本更新窗口中的标签。问题是,只要用户在搜索字段中键入内容,标签就会立即更新,我需要在用户键入文本并按Enter键之前不更新标签。我可以用典型的NSTextField做到这一点,但我想使用NSSearchField,这样我就可以显示最近的搜索结果。请看我下面的代码,并提供一些建议。谢谢。

接口文件:

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;

@property (weak) IBOutlet NSSearchField *searchField;
@property (weak) IBOutlet NSTextField *textField;

- (IBAction)searchString:(id)sender;

@end

实现文件:

代码语言:javascript
复制
#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize searchField, textField;

- (void)awakeFromNib {

    if ( [searchField respondsToSelector:@selector(setRecentSearches:)] ) {
        NSMenu *searchMenu = [[NSMenu alloc] initWithTitle:@"Search Menu"];
        [searchMenu setAutoenablesItems:YES];

        NSMenuItem *recentsTitleItem = [[NSMenuItem alloc] initWithTitle:@"Recent Searches" action:nil keyEquivalent:@""];
        [recentsTitleItem setTag:NSSearchFieldRecentsTitleMenuItemTag];
        [searchMenu insertItem:recentsTitleItem atIndex:0];

        NSMenuItem *norecentsTitleItem = [[NSMenuItem alloc] initWithTitle:@"No recent searches" action:nil keyEquivalent:@""];
        [norecentsTitleItem setTag:NSSearchFieldNoRecentsMenuItemTag];
        [searchMenu insertItem:norecentsTitleItem atIndex:1];

        NSMenuItem *recentsItem = [[NSMenuItem alloc] initWithTitle:@"Recents" action:nil keyEquivalent:@""];
        [recentsItem setTag:NSSearchFieldRecentsMenuItemTag];   
        [searchMenu insertItem:recentsItem atIndex:2];

        NSMenuItem *separatorItem = (NSMenuItem*)[NSMenuItem separatorItem];
        [separatorItem setTag:NSSearchFieldRecentsTitleMenuItemTag];
        [searchMenu insertItem:separatorItem atIndex:3];

        NSMenuItem *clearItem = [[NSMenuItem alloc] initWithTitle:@"Clear" action:nil keyEquivalent:@""];
        [clearItem setTag:NSSearchFieldClearRecentsMenuItemTag];
        [searchMenu insertItem:clearItem atIndex:4];

        id searchCell = [searchField cell];
        [searchCell setMaximumRecents:20];
        [searchCell setSearchMenuTemplate:searchMenu];
    }
}

- (IBAction)searchString:(id)sender {
    [textField setStringValue:[searchField stringValue]];
}

@end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 10:44:27

如果您不想在代码中执行此操作,请查看nib文件,选择搜索字段,然后选择“发送整个搜索字符串”。

如下所示:

希望这能有所帮助!

票数 6
EN

Stack Overflow用户

发布于 2012-05-17 10:38:34

您需要使用searchField.cell setSendsWholeSearchString:是

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10628809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档