Укажите редактирование 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: установите их обратно в редактируемые, и вы сможете переключаться между ними, как обычно.