UITextView自动完成修改

时间:2013-08-07 16:12:36

标签: iphone ios objective-c

如果用户开始输入已存在的条目,我目前正在使用此HTAutocompleteTextField填写带有预定义列表的UITextField。然而,我遇到了一些问题。第一个是当输入逗号(但不是撇号)时似乎停止。我一直在四处寻找,我真的不确定它为什么要这样做。我觉得有一点可能是逗号是一个不同的逗号,就像我从word文档中导入列表时的撇号问题。但事实并非如此。第二个问题更多是一个我不确定如何实现的补充。我还希望autosuggest能够检测中间字符串中的单词建议,而不仅仅是从头开始。因此,例如输入“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:@""];
        }

    }

如果有人能给我任何关于如何完成这项任务的指示,我会很感激。

的问候,
麦克

1 个答案:

答案 0 :(得分: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;
    }

重新排序数组的原因是因为在键入第3个字符后,它将优先考虑其他两个if语句,因为如果数组中的多个条目中存在通用术语,则会首先到达它们(例如" Street& #34;在一个位置列表中)。我知道没有必要拥有" hasSuffix"如果声明,但我离开它以防万一有人想在它上面使用它。最后,我在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];

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

麦克