2013-08-07 1 views
0

Я в настоящее время использую этот HTAutocompleteTextField для заполнения UITextField с предопределенным списком, если пользователь начнет вводить запись, которая уже существует. Однако есть несколько проблем, которые у меня были. Во-первых, он, кажется, останавливается, когда вводится запятая (но не апострофы). Я смотрю вокруг, и я действительно не уверен, почему он это делает. Я подумал, что в какой-то момент это может означать, что запятая была другой запятой, например, проблемой апострофа, которую я получил из-за импорта списка из текстового документа. Однако это было не так. Вторая проблема - это дополнение, которое я не совсем уверен, как реализовать. Я также хочу, чтобы autosuggest обнаруживал предложения для слов в середине строки, а не только с самого начала. Так, например, ввод в «String» предполагает «String». Это в настоящее время, как это делает авто, но я не знаю, как это сделать.UITextView модификация автозаполнения

NSString *prefixLastComponent = [componentsString.lastObject stringByTrimmingCharactersInSet:space]; 
    if (ignoreCase) 
    { 
     stringToLookFor = [prefixLastComponent lowercaseString]; 
    } 
    else 
    { 
     stringToLookFor = prefixLastComponent; 
    } 

    for (NSString *stringFromReference in colorAutocompleteArray) 
    { 
     NSString *stringToCompare; 
     if (ignoreCase) 
     { 
      stringToCompare = [stringFromReference lowercaseString]; 
     } 
     else 
     { 
      stringToCompare = stringFromReference; 
     } 

     if ([stringToCompare hasPrefix:stringToLookFor]) 
     { 
      return [stringFromReference stringByReplacingCharactersInRange:[stringToCompare rangeOfString:stringToLookFor] withString:@""]; 
     } 

    } 

Если кто-нибудь может дать мне указания на то, как это сделать, я был бы признателен.

С уважением,
Майк

ответ

0

Успели идти о решении обеих проблем. Для любого, кто использует этот репозиторий Git, причина, по которой запятые не работают при использовании предустановленных методов, связана с NSArray *componentsString = [prefix componentsSeparatedByString:@","];. Удалите запятую, чтобы она была NSArray *componentsString = [prefix componentsSeparatedByString:@""];, и она должна работать хорошо. Чтобы исправить другую проблему, когда она только обнаруживает начало слов, я немного изменил методы. Вот мои изменения в HTAutocompleteManager.m

int i = 0; 
    for (NSString *stringFromReference in colorAutocompleteArray) 
    { 
     NSString *stringToCompare; 
     if (ignoreCase) 
     { 
      stringToCompare = [stringFromReference lowercaseString]; 
     } 
     else 
     { 
      stringToCompare = stringFromReference; 
     } 

     if ([stringToCompare hasPrefix:stringToLookFor]) 
     { 
      //NSLog(@"Removing String: %@ atIndex: %d", [colorAutocompleteArray objectAtIndex:i], i); 
      [colorAutocompleteArray removeObjectAtIndex:i]; 
      [colorAutocompleteArray insertObject:stringFromReference atIndex:0]; 
      //NSLog(@"Adding String atIndex 0: %@", stringFromReference); 

      return [stringFromReference stringByReplacingCharactersInRange:[stringToCompare rangeOfString:stringToLookFor] withString:@""]; 
     } 
     else if ([stringToCompare hasSuffix:stringToLookFor] && ([stringToLookFor length] >= 3)) { 
      return [NSString stringWithFormat:@" %@", stringFromReference]; 
     } 
     else if (!([stringToCompare rangeOfString:stringToLookFor].location == NSNotFound) && ([stringToLookFor length] >= 3)) 
     { 
      return [NSString stringWithFormat:@" %@", stringFromReference]; 
     } 
     ++i; 
    } 

Причина переупорядочиванием массива происходит потому, что после того, как третий персонаж набирается она будет уделять первостепенное внимание двум другим, если заявления, потому что они будут достигнуты первые, если есть общий термин, в несколько записей в массиве (например, «Улица» в списке местоположений). Я знаю, что нет необходимости иметь оператор hasSuffix if, но я оставил его на случай, если кто-то захочет использовать его самостоятельно. Наконец, я добавил в пробе до stringFromReference, чтобы он не выглядел странным, когда есть предложение прямо после входного текста. Когда мы выходим из UITextField убирает это пространство, как это (внутри HTAutocompleteTextField.m - commitAutocompleteText):

NSString *currentText = self.text; 
if ([self.autocompleteString isEqualToString:@""] == NO 
    && self.autocompleteDisabled == NO) 
{ 
    if ([self.autocompleteString hasPrefix:@" "]) { 
     self.autocompleteString = [self.autocompleteString substringFromIndex:1]; 
    } 
    self.text = [NSString stringWithFormat:@"%@", self.autocompleteString]; 

    self.autocompleteString = @""; 
    [self updateAutocompleteLabel]; 
} 
return ![currentText isEqualToString:self.text]; 

Надеется, что это имеет смысл для любого, кто в подобной ситуации.

Mike

Смежные вопросы