2013-08-07 100 views
0

我正在使用此HTAutocompleteTextField來填寫UITextField與預定義的列表,如果用戶開始輸入已存在的條目。然而,我遇到了一些問題。首先是當逗號輸入時(但不是撇號)它似乎停止。我一直在環顧四周,我不確定它爲什麼這樣做。我認爲有一點可能是逗號是一個不同的逗號,就像我從單詞文檔中導入列表時引起的撇號問題。但事實並非如此。第二個問題更多的是我不確定如何實施的補充。我還希望autosuggest檢測中間字符串中的單詞建議,而不僅僅是從一開始。因此,例如輸入「字符串」會建議「這是一個字符串」。目前它如何做汽車建議,但我不知道如何做上述事情。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; 
    } 

之所以重新排序的數組是因爲第三個字符被鍵入後,將其他兩個if語句的優先級,因爲他們將首先到達,如果有一個通用術語數組中的多個條目(如位置列表中的「街道」)。我知道沒有必要擁有「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