2010-10-20 57 views
5

我正在寻找一种方式来创建行为如下的nssearchfield:基于文本 如何防止NSSearchField使用第一个自动完成列表条目覆盖输入的字符串?

    • 用户类型相匹配的自动完成下拉出现
    • 在搜索字段中的文本不自动完成的第一个项目在列表中

    的一点是,我的字符串匹配的文本字段中的任何字符串并自动完成搜索是行不通的,因为它会奥雅纳改写我输入的字符串。实际上,这似乎应该是默认行为,还是我误解了搜索字段的用途?
    进一步键入会进一步限制列表,但只有在自动完成下拉列表中选择一个项目后,该项目才会插入到文本字段中。

    如果这不能使用nssearchfield来实现,是否有其他选择?

  • 回答

    3

    我自己的解决方案其实很简单:只需将搜索字符串本身添加到自动完成建议列表中即可。
    这在NSSearchField委托方法control:textView:completions:forPartialWordRange:indexOfSelectedItem:完成:

    ... 
    partialString = [[textView string] substringWithRange:charRange]; 
    ... 
    
    matches  = [NSMutableArray array]; 
    
    // find any match in our keyword array against what was typed - 
    for (i=0; i< count; i++) 
    { 
    string = [keywords objectAtIndex:i]; 
    if ([string 
        rangeOfString:partialString 
        options: NSCaseInsensitiveSearch | NSForcedOrderingSearch 
        range:NSMakeRange (0, [string length])] 
        .location != NSNotFound) { 
        [matches addObject:string]; 
    } 
    } 
    [matches sortUsingSelector:@selector(compare:)]; 
    
    // Make sure we insert the already entered string, even if it does not 
    // match with any of the retrieved keywords. This will enter this string 
    // in the search field, as we intended, and it will not be overwritten 
    // with any match. 
    [matches insertObject:partialString atIndex: 0]; 
    
    return matches; 
    
    +0

    这是相当聪明的,我喜欢它。如果建议有多个词,这会导致问题。它适用于第一个单词,但之后会在第一个单词后插入完整的建议。我想知道有没有办法解决这个问题。 – Jeremy 2011-03-02 05:32:50

    +0

    回答了我自己的问题。请参阅http://stackoverflow.com/questions/5163646/how-to-make-nssearchfield-send-action-upon-autocompletion/5360535#5360535关于如何在输入空格后避免自动填充的答案。 – Jeremy 2011-03-19 06:20:53

    +0

    @jeremy你会解释我更多关于你的答案,我想在输入空格后实现相同的自动完成? – 2016-01-05 17:45:45

    相关问题