2012-11-29 13 views
8

क्या किसी को किसी भी वर्ग या lib के बारे में पता है जो एक NSTextField को स्वत: पूर्णता लागू कर सकता है?NSTextField स्वत: पूर्ण

मैं काम करने के लिए मानक स्वत: पूर्णता प्राप्त करने की कोशिश कर रहा हूं लेकिन इसे एक तुल्यकालिक एपीआई के रूप में बनाया गया है। मुझे इंटरनेट पर एपीआई कॉल के माध्यम से अपना स्वत: पूर्ण शब्द मिलता है।

मैं अब तक क्या किया है:

- (void)controlTextDidChange:(NSNotification *)obj 
{ 
    if([obj object] == self.searchField) 
    { 
     [self.spinner startAnimation:nil]; 
     [self.wordcompletionStore completeString:self.searchField.stringValue]; 

     if(self.doingAutocomplete) 
      return; 
     else 
     { 
      self.doingAutocomplete = YES; 
      [[[obj userInfo] objectForKey:@"NSFieldEditor"] complete:nil]; 
     } 
    } 
} 

जब मेरी दुकान से किया जाता है, मैं एक प्रतिनिधि कहा जाता हो जाता है कि है:

- (void) completionStore:(WordcompletionStore *)store didFinishWithWords:(NSArray *)arrayOfWords 
{ 
    [self.spinner stopAnimation:nil]; 
    self.completions = arrayOfWords; 
    self.doingAutocomplete = NO; 
} 

कोड कि nstextfield को पूरा होने सूची लौटाता है है:

- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index 
{ 
    *index = -1; 
    return self.completions; 
} 

मेरी समस्या यह है कि यह हमेशा 1 अनुरोध और समापन सूची ओ होगा हर दूसरे चार उपयोगकर्ता इनपुट पर nly दिखाता है।

मैं गूगल खोज और इसलिए एक पागल आदमी की तरह की कोशिश की है, लेकिन मैं नहीं कर सकते किसी भी समाधान खोजने के लिए ..

किसी भी मदद की बहुत सराहना कर रहा है लगता है।

उत्तर

9

बूलियन संपत्ति करने के बजाय ऑटोकॉम्प्लेट, संपत्ति को अपना नियंत्रण बनाते हैं जिसने अनुरोध किया है। यह autoCompleteRequestor कहते हैं:

@property (strong) NSControl* autoCompleteRequestor; 

तो जहां हाँ के लिए अपने वर्तमान संपत्ति doingAutocomplete निर्धारित करते हैं, बजाय अपने नियंत्रण के लिए एक संदर्भ की दुकान।

- (void)controlTextDidChange:(NSNotification *)obj 
{ 
    if([obj object] == self.searchField) 
    { 
     [self.spinner startAnimation:nil]; 
     [self.wordcompletionStore completeString:self.searchField.stringValue]; 

     if(self.autoCompleteRequestor) 
      return; 
     else 
     { 
      self.autoCompleteRequestor = [[obj userInfo] objectForKey:@"NSFieldEditor"]; 
     } 
    } 
} 

अब जब आपके वेब अनुरोध किया जाता है, आप पूरा कॉल कर सकते हैं: अपने संग्रहीत वस्तु पर।

- (void) completionStore:(WordcompletionStore *)store didFinishWithWords:(NSArray *)arrayOfWords 
{ 
    [self.spinner stopAnimation:nil]; 
    self.completions = arrayOfWords; 
    if (self.autoCompleteRequestor) 
    { 
     [self.autoCompleteRequestor complete:nil]; 
     self.autoCompleteRequestor = nil; 
    } 
} 
+0

जब मैं अपने कोड पर वापस आ जाता हूं तो मैं आपके समाधान का परीक्षण करूंगा। –

+1

यह पूरी तरह से काम किया। मैंने स्वयं को if. stateingAutocomplete के बजाय self.autoCompleteRequestor की जांच करने के लिए if-statematement को बदल दिया है। यह बूलियन var अब और आवश्यक नहीं है। एक बार फिर धन्यवाद! –

-1

NSTextView में आंशिक शब्दों के शब्दों को पूरा करने की कार्यक्षमता है।

इस घटक के लिए documentation पर एक नज़र डालें। शायद आप अपने आवेदन में इस घटक पर स्विच कर सकते हैं।

+0

ठीक है। समस्या यह है कि उपयोगकर्ता द्वारा शब्द टाइप करने के कुछ मिनट बाद सुझावों को प्राप्त करने के दौरान डिफ़ॉल्ट कार्यान्वयन अपेक्षाकृत परिणाम प्राप्त करने की अपेक्षा करता है। –

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