4

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
4

2 に答える 2

6

コードで実行したくない場合は、nib ファイルを表示し、検索フィールドを選択して、[検索文字列全体を送信する] を選択します。

そのようです:

検索文字列全体を送信

お役に立てれば!

于 2012-05-17T02:44:27.050 に答える
1

[searchField.cell setSendsWholeSearchString:YES] を使用する必要があります

于 2012-05-17T02:38:34.217 に答える