2012-05-17 3 views
4

Я создал NSSearchField, в котором хранится список последних запросов. Поле поиска подключено к методу, который обновляет метку в окне с текстом, введенным в поле поиска. Проблема в том, что ярлык обновляется, как только пользователь вводит в поле поиска, мне нужно, чтобы метка не обновлялась до тех пор, пока пользователь не наберет текст и не нажмет клавишу Enter. Я могу сделать это с типичным NSTextField, но я хочу использовать NSSearchField, чтобы я мог показывать последние запросы. См. Мой код ниже и предложите некоторые предложения. Благодарю.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 

ответ

6

Если вы не хотите, чтобы сделать это в код, просмотрите файл nib, выберите поле поиска и выберите «Отправляет всю строку поиска»

Как Итак:

Sends Whole Search String

Надеется, что это помогает!

+0

Ах, не видел этого. Пробовал, и он отлично работает. Спасибо за совет! – wigging

1

Вы должны использовать [searchField.cell setSendsWholeSearchString: YES]

+0

Спасибо, но я решил пойти по пути Interface Builder и просто проверить поле «Отправить целую строку поиска». – wigging