В моем приложении я показываю лист с NSComboBox в нем. Если пользователь использует клавиши со стрелками, чтобы выбрать запись из меню, а затем «Вернуть», чтобы выбрать ее, кнопка OK листа также будет действовать, так как она возвращает в качестве эквивалента ключа. Я хотел бы остановить эти клавиши возврата, действуя как ОК. После того, как вы попробовали много вещей (помимо подкласса NSComboBox, который начал превращаться в кошмар), я пытаюсь игнорировать OK щелчки, если поле со списком является первым ответчиком, а текущее событие - клавишей возврата, но NSPanel, который лист подклассов всегда возвращается в качестве текущего первого ответчика. Я ожидал редактор поля, но все, что я получаю, это NSPanel.
1) Есть ли лучший способ сделать это? Пользователь ДЕЙСТВИТЕЛЬНО хочет вводить данные на основе клавиатуры, а не обманывать.
2) Если это лучший способ, как я могу сказать, что поле со списком является первым ответчиком?
Любая помощь с благодарностью принимается. Наверняка об этом уже говорилось?
Rev. ЭндиNSComboBox - ключ возврата ловушки
1
A
ответ
1
Существует обходной путь, его не очень, но это будет работать:
Регистрация для обоих уведомлений NSComboBoxWillPopUpNotification и NSComboBoxWillDismissNotification.
- (void)comboBoxWillPopUp:(NSNotification *)notification
{
okButton.keyEquivalent = @"";
}
- (void)comboBoxWillDismiss:(NSNotification *)notification
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^{
okButton.keyEquivalent = @"\r";
});
}
Вы попробовали создать combobox firstresponder? –
Я думаю, проблема заключается в том, что пока отображается меню со списком, нет четкого значения для первого ответчика, поэтому он оказывается заостренным в окне. –
Ужасное обходное решение - записать время, в которое было отклонено меню (в comboBoxWillDismiss :), и проверить время, когда вызывается селектор кнопок OK - если между ними меньше 0,1 с, я игнорирую OK. Кнопка OK все еще мигает, но, по крайней мере, работает общая функциональность. Некрасиво. –