2010-10-20 16 views
5

Ben şöyle davranır bir nssearchfield oluşturmak için bir yol arıyorum: dayalı metne NSSearchField, ilk otomatik tamamlama listesi girdisini kullanarak girilen dizelerin üzerine yazmasını nasıl önler?

  • yılında

    • kullanıcı türleri ile eşleşen bir otomatik tamamlama açılan
    • görünen arama alanına metin yapar o ove çünkü

    noktasıdır listedeki ilk öğeye değil otomatik tamamlama, metin alanına herhangi bir alt ve otomatik tamamlanması için eşleşen aramalarda benim dize işe yaramaz girilen dizgimi yeniden yaz. Aslında bu varsayılan davranış olmalı mı, yoksa bir arama alanının amacını yanlış anlamış mıyım?
    Ayrıca yazma, listeyi daha fazla ve daha fazla kısıtlar, ancak yalnızca otomatik tamamlama açılır listesindeki bir öğeyi seçtikten sonra bu öğe metin alanına eklenir.

    Bu, bir nssearchfield kullanılarak gerçekleştirilemezse, alternatif var mı?

  • cevap

    3

    Kendi çözümüm aslında çok basitti: sadece arama dizgesini otomatik tamamlama için öneriler listesine ekleyin.
    Bu NSSearchField temsilci yönteminde control:textView:completions:forPartialWordRange:indexOfSelectedItem: yapılır: Oldukça zeki

    ... 
    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

    , ben beğendim. Öneriler birden fazla kelimeye sahipse, bu bir soruna neden olur. İlk sözcük için harika çalışıyor, ancak bundan sonra ilk kelimeden sonra tam öneri ekleyecektir. Bu konuda herhangi bir yolu olup olmadığını merak ediyorum. – Jeremy

    +0

    Kendi sorumu yanıtladı. Alan yazdıktan sonra otomatik tamamlamadan nasıl kaçınacağınız için http://stackoverflow.com/questions/5163646/how-to-make-nssearchfield-send-action-upon-autocompletion/5360535#5360535 adresindeki cevabımı inceleyin. – Jeremy

    +0

    @jeremy, cevabınızı daha fazla açıklayacaktır lütfen, alan yazdıktan sonra aynı otomatik tamamlama elde etmek istiyorum? –