銘柄記号と名前を検索するために、iTunes の検索フィールドの動作を再現しようとしています。具体的には、検索フィールドに入力を開始すると、フィルタリングされたアイテムを含むポップオーバーが表示されます。ほとんどの場合、これは機能していますが、複製できないのは、ファーストレスポンダーの処理方法です
3文字入力するとポップオーバーが表示されます。この時点で、NSSearchField はファーストレスポンダーのステータスを失うため、入力を続けることができなくなります。私が望む動作は、ポップオーバーが表示された後、矢印キーでアイテムをスクロールして入力を再開し、検索フィールドの最後の文字から続行する機能です。
私が試したのは、NSTextView のサブクラス化 (これを NSSearchField のカスタム フィールド エディターとして使用) とオーバーライドです。
- (BOOL)resignFirstResponder
NO を返すだけで、ポップオーバーが表示されたら入力を続けることができますが、明らかに、ポップオーバー内の項目を選択することはできません。下向き矢印またはマウスダウンイベントが発生した場合にYESを返す次のことを試しました。
@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 イベントでは機能しません。さらに、ユーザーが入力を再開したときに、これは問題に対処しません。
助言がありますか?