Как бороться с первым респондентом и NSPopover
Я пытаюсь повторить поведение поля поиска в iTunes для поиска биржевых символов и названий. В частности, когда вы начинаете печатать в поле поиска, появляется всплывающее окно с отфильтрованными элементами. По большей части у меня это работает, но я не могу воспроизвести то, как он работает с первым респондентом.
Мой поповер появляется после ввода трех символов. На этом этапе NSSearchField потерял бы статус первого респондента, и поэтому я больше не мог продолжать печатать. Мне хотелось бы, чтобы поведение продолжало печатать после появления всплывающего окна, если при прокрутке элементов с помощью клавиш со стрелками и возобновлении набора текста вы продолжите с последнего символа в поле поиска.
Я попытался создать подкласс NSTextView (используйте его как редактор пользовательских полей для NSSearchField) и переопределить
- (BOOL)resignFirstResponder
Просто вернув NO, я могу продолжить ввод после появления всплывающего окна, но, очевидно, я не могу выбрать ни один из элементов во всплывающем окне. Поэтому я попробовал следующее, которое возвращает ДА, если происходит стрелка вниз или событие mousedown.
@interface SBCustomFieldEditor ()
{
BOOL resignFirstRepond;
}
@end
@implementation SBCustomFieldEditor
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
resignFirstRepond = NO;
}
return self;
}
- (BOOL)resignFirstResponder
{
return resignFirstRepond;
}
- (void)keyDown:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 125) {
resignFirstRepond = YES;
[self resignFirstResponder];
}
[super keyDown:theEvent];
}
- (void)mouseDown:(NSEvent *)theEvent
{
resignFirstRepond = YES;
[self resignFirstResponder];
}
Это работает для события mousedown, но не для события keydown, более того, это не решает проблему, когда пользователь возобновляет набор текста.
Какие-либо предложения?