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
5
A
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.
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.
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
Non l'ho ancora testato, ma forse potresti cambiare l'intera cosa NSEvent in '[NSEvent currentEvent]'. Forse poi ottiene la posizione predefinita ecc. – Jef