Я создал 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
Ах, не видел этого. Пробовал, и он отлично работает. Спасибо за совет! – wigging