2011-11-11 66 views
5

我一直在搜索小時,但仍未找到答案。你怎麼能得到一個NSSearchField顯示結果菜單。我可以使用最近的搜索菜單來顯示結果,但是如何以編程方式使菜單顯示?謝謝你的幫助。NSSearchField結果菜單

回答

5

我相信Apple會用一些私人方法來做到這一點。也許它使用NSWindow而不是NSMenu。一種方法是在您的NSSearchField代表中執行此操作,前提是您有一個IBOutlet指向NSSearchField

- (void)controlTextDidEndEditing: (NSNotification *)aNotification 
{ 
    NSString *searchString = [searchField stringValue]; 

    NSMenu *menu = [[NSMenu alloc] initWithTitle: @"results"]; 

    [menu addItemWithTitle: searchString action: @selector(someAction:) keyEquivalent: @""]; 
    [menu addItemWithTitle: @"someString" action: @selector(someOtherAction:) keyEquivalent: @""]; 

    NSEvent *event = [NSEvent otherEventWithType: NSApplicationDefined 
             location: [searchField frame].origin 
            modifierFlags: 0 
             timestamp: 0 
            windowNumber: [[searchField window] windowNumber] 
              context: [[searchField window] graphicsContext] 
              subtype: NSApplicationDefined 
              data1: 0 
              data2: 0]; 

    [NSMenu popUpContextMenu: [menu autorelease] withEvent: event forView: searchField]; 
} 

請注意,顯示菜單會阻止在NSSearchField中進一步輸入。這就是爲什麼我使用controlTextDidEndEditing:而不是controlTextDidChange:。您還應該檢查NSEvent's Class Reference以獲取更多的事件定製。

+0

謝謝,完美的作品。唯一的變化是,我修改了事件中的位置參數,將菜單向下移動了大約5個,使其不會與搜索字段重疊。謝謝! – edc1591

+0

我沒有測試過,但也許你可以改變整個NSEvent的事情'[NSEvent currentEvent]'。也許它會得到默認位置等。 – Jef

1

Apple有some sample代碼類似於你所需要的。示例代碼使用NSTextField(它是NSSearchField的父類)。希望這能解決你的問題。