Jak radzić sobie z pierwszym ratownikiem i NSPopover
Próbuję odtworzyć zachowanie pola wyszukiwania w iTunes, aby wyszukać symbole giełdowe i nazwy. W szczególności, gdy zaczniesz pisać w polu wyszukiwania, pojawi się popover z filtrowanymi elementami. W większości mam to działa, jednak to, czego nie mogę powielić, to sposób, w jaki obsługuje on pierwszego reagującego
Mój popover pojawia się po wprowadzeniu trzech znaków. W tym momencie pole NSSearchField utraciłoby status pierwszego respondenta i dlatego nie mogłem kontynuować pisania. Zachowanie, które chciałbym, to możliwość kontynuowania pisania po pojawieniu się popovera, jeśli przewijasz elementy za pomocą klawiszy strzałek, a następnie wznawiasz pisanie, kontynuowałbyś od ostatniego znaku w polu wyszukiwania.
Próbowałem podklasy NSTextView (użyj tego jako niestandardowego edytora pól dla NSSearchField) i nadpisując
- (BOOL)resignFirstResponder
Zwracając NIE, mogę kontynuować pisanie, gdy pojawi się popover, ale oczywiście nie mogę wybrać żadnego z elementów w popover. Wypróbowałem więc następujące polecenie, które zwraca TAK, jeśli wystąpi strzałka w dół lub zdarzenie przeniesienia.
@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];
}
Działa to na zdarzenie mousedown, ale nie na zdarzenie keydown, a ponadto nie rozwiązuje problemu, gdy użytkownik wznawia pisanie.
Jakieś sugestie?