2013-02-13 13 views
5

मैं अपने अनुप्रयोग में एक NSTokenField है। जब मैं पूरा होने सूची से कोई एक सुझाव क्लिक करें, मैं इस सूची गायब हो और टोकन पूरा होने की (जैसे मेल) हालांकि, यह हो रहा हो प्रतीत नहीं होता है चाहते हैं - एक सुझाव पर क्लिक बस के शेष संलग्न कर देता है स्ट्रिंग और सूची गायब नहीं होती है।किसी आइटम पर क्लिक होने पर NSTokenField पूर्णता सूची बंद करें?

पूरा होने सूची disappers अगर मैं वापसी दबाते हैं, लेकिन मैं इसे साथ ही एक सुझाव पर क्लिक करके खारिज कर दिया जाना चाहते हैं। इसे कैसे प्राप्त किया जा सकता है?

+2

आप अपनी समस्या का समाधान मिला? – siekfried

उत्तर

4

मैं इस समस्या है, जो अभी तक सही नहीं है के लिए एक समाधान पाया, लेकिन मुझे आशा है कि मैं जल्द ही आखिरी मुद्दा मैं का समाधान होगा।

मैं rubymotion का उपयोग कर रहा हूं और यहां तक ​​कि अगर मैं Objective-CRuby में अनुवाद कर सकता हूं, तो मैं विपरीत नहीं कर पा रहा हूं इसलिए मेरा उत्तर Ruby में होगा। संबंधित Objective-C कोड जोड़ने के लिए मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें।

मेरे NSTokenField के प्रतिनिधि में, मैंने controlTextDidChangeNSControl विधि का उपयोग किया जिसे किसी भी समय मैं अपने टोकन फ़ील्ड में एक वर्ण लिखता हूं। इस विधि में मैं जाँच अगर वहाँ एक NSLeftMouseUp घटना है जो शुरू हो रहा है है, और अगर यह मामला है, मैं Return पर एक क्लिक (यह अन्य SO question से सीखा) अनुकरण। और बस।

यहाँ मेरी Ruby कोड है:

def controlTextDidChange(aNotification) 
    application = NSApplication.sharedApplication 
    event = application.currentEvent 
    if event.type == NSLeftMouseUp 
    e1 = CGEventCreateKeyboardEvent(nil, 0x24, true) 
    CGEventPost(KCGSessionEventTap, e1) 
    end 
end 

लेकिन जैसे मैंने तुमसे कहा था, यह अभी तक सही नहीं है: मेरी समस्या यह है कि अगर मैं उदाहरण के लिए 3 आइटम, उनमें से एक होगा के साथ एक पूरा होने सूची है डिफ़ॉल्ट रूप से चुना जाए, आइए पहले कहें। इस मामले में, मेरा समाधान अपेक्षित रूप से काम करेगा यदि मैं दूसरी या तीसरी वस्तु पर क्लिक करता हूं लेकिन मुझे इसे काम करने के लिए पहले आइटम को डबल क्लिक करना होगा।

लेकिन फिर भी, यह एक अच्छी शुरुआत है और मुझे आशा है कि यह मदद मिलेगी!

संपादित

पिछले मुद्दा रहा था ठीक करने के लिए, मैं स्वतः पूर्ण बंद कर दिया और केवल सुझाव पेटी का प्रदर्शन किया। ऐसा करने के लिए, मैं tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem: विधि के लिए इस लाइन कहा:

selectedIndex[0] = -1 
+0

अपने जवाब के लिए ऑब्जेक्टिव-सी कोड में जोड़ने की कोशिश की, लेकिन मेरे संपादन अस्वीकार ... = ( – rocky

+0

अगर ([[NSApplication sharedApplication] currentEvent] .type == NSLeftMouseUp) { CGEventPost (kCGSessionEventTap, CGEventCreateKeyboardEvent (शून्य किया जा रहा है , 0x24, सत्य)); } – Kappe

0

धन्यवाद करने के लिए @siekfried!

- (void)controlTextDidChange:(NSNotification *)aNotification; 
{ 
    if([[NSApplication sharedApplication]currentEvent].type == NSLeftMouseUp) 
    { 
     CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(nil, 0x24, true)); 
    } 
} 

काम करता है वास्तव में अच्छी तरह;)

पहला तत्व स्वत: चयन अपने प्रतिनिधि को यह जोड़ने से बचने के लिए:

-(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex 
{ 
    *selectedIndex = -1; 
... 
... 
} 
संबंधित मुद्दे