How to prevent NSSearchField from overwriting entered strings using the first autocompletion list entry?
Asked Answered
R

1

5

I am looking for a way to create an nssearchfield that behaves as follows:

  • user types in text
  • based on matches an autocompletion drop-down appears
  • the text in the search field does not autocomplete to the first item in the list

The point is, my string matching searches for any substring and autocompletion in the text field would not work because it would overwrite my entered string. In fact it seems this should be the default behaviour, or am I misunderstanding the purpose of a search field?
Typing further would restrict the list further and further, but only after selecting an item in the autocompletion dropdown would that item be inserted into the text field.

If this cannot be accomplished using an nssearchfield, is there an alternative?

Ratcliffe answered 20/10, 2010 at 19:12 Comment(0)
R
4

My own solution was actually very simple: just add the search string itself to the list of suggestions for the autocompletion.
This is done in the NSSearchField delegate method 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;
Ratcliffe answered 1/11, 2010 at 8:29 Comment(3)
That's pretty clever, I like it. If the suggestions have multiple words, this causes a problem though. It works great for the first word, but after that it will insert the full suggestion after the first word. I wonder if there is any way around that.Hilar
Answered my own question. See my answer to #5164146 for how to avoid autocompleting after typing space.Hilar
@jeremy will u please explain me more on your answer , i want to achieve same autocompleting after typing space ?Aschim

© 2022 - 2024 — McMap. All rights reserved.