2013-01-21 25 views
5

मैंने इंटरफ़ेस बिल्डर के भीतर डेटा स्रोत से जुड़े NSComboBox को बाध्य किया है। जब मैं NSComboBox में कुछ टाइप करता हूं, तो मुझे स्वतः पूर्ण सुझाव मिलते हैं।मैं एनएससीम्बोबॉक्स के लिए केस असंवेदनशील स्वत: पूर्ण कैसे सक्षम कर सकता हूं?

हालांकि स्वत: पूर्ण मामला संवेदनशील है, जिसका अर्थ है कि यदि चरित्र गलत केस का उपयोग करता है तो मुझे सुझाव नहीं मिलता है।

मैं एनएससीम्बोबॉक्स के लिए केस असंवेदनशील स्वत: पूर्ण कैसे सक्षम कर सकता हूं, जो इंटरफ़ेस बिल्डर में डेटा स्रोत से जुड़ा हुआ है?

धन्यवाद

उत्तर

4

आप अपने NSComboBox डेटा स्रोत में comboBox:completedString: को लागू करना चाहिए, उदाहरण के लिए:

- (NSString *)comboBox:(NSComboBox *)comboBox completedString:(NSString *)partialString 
{ 
    for (NSString dataString in dataSourceArray) { 
     if ([[dataString commonPrefixWithString:partialString options:NSCaseInsensitiveSearch] length] == [commonPrefixWithString:partialString length]) { 
      return testItem; 
     } 
    } 
    return @""; 
} 
+0

लेकिन इसका मतलब है कि मैं इंटरफ़ेस बिल्डर में डेटा स्रोत निर्दिष्ट नहीं कर सकता। सही बात ? मेरे पास इंटरफ़ेस बिल्डर में कॉन्फ़िगर किए गए कई फ़ील्ड हैं, यह प्रोग्राम स्रोत रूप से डेटा स्रोत से जुड़ने के लिए बहुत काम करेगा। – aneuryzm

+0

@patrik आपको बाइंडिंग का समर्थन करने की आवश्यकता है? (डेटा स्रोत का प्रकार क्या है) –

+4

यदि आप कोको बाइंडिंग के साथ कॉम्बोबॉक्स खिला रहे हैं, तो आपको "आवश्यक" डेटा स्रोत विधियों को लागू करने की आवश्यकता नहीं है। जब तक एनएससीम्बोबॉक्स में बाध्य नियंत्रक होता है, तो आप * कॉम्बो बॉक्स को डेटासोर्स से कनेक्ट भी कर सकते हैं, और डेटासोर्स में केवल कॉम्बोबॉक्स होना चाहिए: पूर्ण स्ट्रिंग "विधि लागू की गई है। – iluvcapra

4

आप एक NSComboBoxCell उपवर्गीकरण और अधिभावी कर सकते हैं [NSComboBoxCell completedString:]।

- (NSString *)completedString:(NSString *)string 
{ 
    NSString *result = nil; 

    if (string == nil) 
     return result; 

    for (NSString *item in self.objectValues) { 
     NSString *truncatedString = [item substringToIndex:MIN(item.length, string.length)]; 
     if ([truncatedString caseInsensitiveCompare:string] == NSOrderedSame) { 
      result = item; 
      break; 
     } 
    } 

    return result; 
} 
+0

जैसा कि मैंने दूसरे प्रश्न में टिप्पणी की है, self.objectValues डेटा स्रोत सही है? मैंने अपने सभी फ़ील्ड को इंटरफ़ेस बिल्डर में डेटा स्रोत से बाध्य कर दिया है, और मेरे पास 80 फ़ील्ड हैं। मुझे स्वत: पूर्ण करने के लिए प्रोग्रामेटिक रूप से पॉप्युलेट करना चाहिए? – aneuryzm

+0

@ पैट्रिक यह दोनों के लिए काम करता है। – Elden