0

我目前正在使用这个HTAutocompleteTextField来填写UITextField使用预定义的列表,如果用户开始输入已经存在的条目。但是,我遇到了几个问题。第一个是它似乎在输入逗号时停止(但不是撇号)。我一直在环顾四周,我真的不确定它为什么会这样做。我曾一度认为逗号可能是不同的逗号,就像我从 Word 文档中导入列表时遇到的撇号问题一样。然而,事实并非如此。第二个问题更多的是我不确定如何实施的补充。我还希望自动提示检测字符串中的单词建议,而不仅仅是从一开始。因此,例如输入“String”会建议“This is a String”。这是目前自动建议的方式,

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:@""];
        }

    }

如果有人可以就如何完成这项工作给我任何指示,我将不胜感激。

问候,
迈克

4

1 回答 1

0

设法解决这两个问题。对于任何使用此 Git Repository 的人来说,使用预设方法时逗号不起作用的原因是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];

希望这对任何处于类似情况的人都有意义。

麦克风

于 2013-08-08T12:19:12.700 回答