2012-05-17 45 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

如果你不想做的代碼,查看您的筆尖文件,選擇搜索字段並選擇「發送整個搜索字符串」

像這樣:

Sends Whole Search String

希望這有助於!

+0

啊,沒有看到。試過了,它效果很好。謝謝你的提示! – wigging

1

您需要使用[searchField.cell setSendsWholeSearchString:YES]

+0

謝謝,但我決定去界面生成器路線,只是檢查「發送整個搜索字符串」框。 – wigging