2013-01-21 8 views
5

Związałem NSComboBox ograniczony do źródła danych w ramach budowania interfejsu. Poprawnie otrzymuję sugestie autouzupełniania, gdy wpisuję coś w NSComboBox.Jak włączyć autouzupełnianie niewrażliwe na wielkość dla NSComboBox?

Jednak w autouzupełnianiu jest rozróżniana wielkość liter, co oznacza, że ​​nie otrzymuję sugestii, jeśli znak używa niewłaściwego przypadku.

Jak włączyć autouzupełnianie niewrażliwe na wielkość dla obiektu NSComboBox, który jest powiązany ze źródłem danych w programie budującym interfejsy?

Dzięki

Odpowiedz

4

Należy wdrożyć comboBox:completedString: w NSComboBox źródła danych, na przykład:

- (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

Ale to oznacza, że ​​nie mogę określić źródła danych w programie budującym interfejs. Prawidłowo? Mam wiele wielu pól, skonfigurowanych w narzędziu do budowania interfejsu, byłoby dużo pracy, aby programowo powiązać je ze źródłem danych. – aneuryzm

+0

@patrik potrzebujesz obsługi wiązań? (jaki jest typ źródła danych) –

+4

Jeśli karmisz ComboBox wiązaniami kakao, nie musisz implementować "wymaganych" metod źródła danych. Tak długo, jak NSComboBox ma powiązany kontroler, możesz * także * podłączyć pole kombi do źródła danych, a to źródło danych musi tylko mieć zaimplementowaną metodę comboBox: completedString " – iluvcapra

4

można instacji się NSComboBoxCell i przesłanianie [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

Jak to skomentowałem w drugim pytaniu, self.objectValues to jest źródło danych? Mam ograniczone wszystkie moje pola do źródła danych w konstruktorze interfejsów, a ja mam 80 pól .Mam powinien wypełnić je programowo, w celu dostosowania autouzupełniania? – aneuryzm

+0

@Patrick Działa dla obu. – Elden

Powiązane problemy