2011-11-11 4 views
5

मैं घंटों की खोज कर रहा हूं और अभी भी इसका उत्तर नहीं मिला है। परिणामों के साथ मेनू प्रदर्शित करने के लिए आपको NSSearchField कैसे मिल सकता है। मैं परिणामों को प्रदर्शित करने के लिए हालिया खोज मेनू का उपयोग कर सकता हूं, लेकिन मैं प्रोग्राम को प्रोग्रामेटिक रूप से कैसे प्रदर्शित करूं? किसी भी मदद के लिए धन्यवाद।NSSearchField परिणाम मेनू

उत्तर

5

मेरा मानना ​​है कि ऐप्पल कुछ निजी तरीकों से ऐसा करता है। शायद यह NSMenu के बजाय NSWindow का उपयोग करता है। ऐसा करने का एक तरीका यह है कि इसे NSSearchField प्रतिनिधि में लागू करें, यह मानते हुए कि आपके पास IBOutletNSSearchField पर इशारा करता है।

- (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 currentEvent]' में बदल सकें। शायद तब यह डिफ़ॉल्ट स्थान आदि हो जाता है। – Jef

1

ऐप्पल के पास some sample कोड है जो आपको चाहिए। नमूना कोड NSTextField का उपयोग करता है (जो NSSearchField का मूल वर्ग है)। उम्मीद है कि यह आपकी समस्या हल करता है।

संबंधित मुद्दे