我已经创建了一个存储最近搜索列表的NSSearchField。搜索字段连接到一个方法,该方法使用输入到搜索字段中的文本更新窗口中的标签。问题是,只要用户在搜索字段中键入内容,标签就会立即更新,我需要在用户键入文本并按Enter键之前不更新标签。我可以用典型的NSTextField做到这一点,但我想使用NSSearchField,这样我就可以显示最近的搜索结果。请看我下面的代码,并提供一些建议。谢谢。
接口文件:
#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实现文件:
#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发布于 2012-05-17 10:44:27
如果您不想在代码中执行此操作,请查看nib文件,选择搜索字段,然后选择“发送整个搜索字符串”。
如下所示:

希望这能有所帮助!
发布于 2012-05-17 10:38:34
您需要使用searchField.cell setSendsWholeSearchString:是
https://stackoverflow.com/questions/10628809
复制相似问题