NSSearchField постоянно вызывает метод

Я создал 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

person wigging    schedule 17.05.2012    source источник


Ответы (2)


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

Вот так:

Отправляет всю строку поиска

Надеюсь это поможет!

person zac0351    schedule 17.05.2012
comment
Ах, не видел этого. Пробовал, и он отлично работает. Спасибо за совет! - person wigging; 17.05.2012

Вам необходимо использовать [searchField.cell setSendsWholeSearchString: YES]

person rdelmar    schedule 17.05.2012
comment
Спасибо, но я решил пойти по маршруту Interface Builder и просто установить флажок Sends Whole Search String. - person wigging; 17.05.2012