Укажите редактирование NSTextField внутри NSPopover при появлении

Я работаю над приложением, которое представляет NSPopover, содержащий несколько полей NSTextFields. Хотя я могу переключаться между этими полями, как и ожидалось, поповер выбирает конкретное текстовое поле, которое будет в состоянии редактирования, когда оно появляется, и это не поле, которое я хочу редактировать; Я хотел бы иметь возможность определить, какое текстовое поле редактируется при появлении поповера программно (или в Интерфейсном Разработчике). Как я могу это сделать?

Я настроил соответствующий цикл просмотра ключей, соединив выходы IB для всех различных текстовых полей, и я подключил всплывающее окно nextResponder Свойство к текстовому полю, которое я хочу отредактировать первым, но это, похоже, не дает никакого эффекта - поповер по-прежнему будет выбирать предпочитаемое текстовое поле вместо моего. Руководство по программированию окон предлагает мне установить initialFirstResponder выход окна в представление, которое я хочу выбрать, но NSPopover не является NSWindow и не имеет initialFirstResponder собственность (если я не пропускаю что-то очевидное).

Есть ли способ указать, какой NSTextField я хочу редактировать при появлении NSPopover?

2 ответа

Я думаю, что вы сказали, что пытались использовать -makeFirstResponder: и прохождение текстового поля. Это установит окно firstResponder, но это не то же самое, что initialFirstResponder и окно должно иметь initialFirstResponder установить что-то другое, чем nil для того, чтобы соблюдать ключевой цикл просмотра. ( Источник) Небольшая настройка того, что вы пытались, сработала для меня:

- (void)popoverWillShow:(NSNotification *)notification
{
    // Set the window's initialFirstResponder so that the key view loop isn't auto-recalculated.
    [[myField window] setInitialFirstResponder:myField];
}

Я думаю, что вы можете сделать эту работу, установив все текстовые поля, которые вы не хотите, чтобы иметь фокус на "выбираемый" вместо "редактируемый" в IB, это должно оставить одно текстовое поле, с которого вы хотите начать, в качестве первого респондента, Затем в вашем методе popoverDidShow: установите их обратно в редактируемые, и вы сможете переключаться между ними, как обычно.

Другие вопросы по тегам