2011-11-11 8 views
5

Ho cercato ore e ancora non ho trovato una risposta a questo. Come si può ottenere un NSSearchField per visualizzare un menu con i risultati. Posso usare il menu delle ricerche recenti per visualizzare i risultati, ma come faccio a far visualizzare il menu a livello di programmazione? Grazie per qualsiasi aiuto.Menu risultati NSSearchField

risposta

5

Credo che Apple lo faccia con alcuni metodi privati. Forse utilizza uno NSWindow anziché uno NSMenu. Un modo per farlo è implementarlo nel delegato NSSearchField presumendo di avere uno IBOutlet che punta allo 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]; 
} 

Si noti che la visualizzazione di un menu impedisce un'ulteriore digitazione nel NSSearchField. Ecco perché ho usato controlTextDidEndEditing: e non controlTextDidChange:. Dovresti anche controllare lo NSEvent's Class Reference per una maggiore personalizzazione dell'evento.

+0

Grazie, funziona perfettamente. L'unico cambiamento è stato che ho modificato il parametro posizione nell'evento per spostare il menu di circa 5 in modo che non si sovrapponga al campo di ricerca. Grazie! – edc1591

+0

Non l'ho ancora testato, ma forse potresti cambiare l'intera cosa NSEvent in '[NSEvent currentEvent]'. Forse poi ottiene la posizione predefinita ecc. – Jef

1

Apple ha il codice some sample simile a quello che ti serve. Il codice di esempio utilizza NSTextField (che è una classe padre di NSSearchField). Spero che questo risolva il tuo problema.