NSDatePicker nextKeyView

#macos #cocoa #nsdatepicker

#macos #cocoa #nsdatepicker

Вопрос:

Кажется, что NSDatePicker nextKeyView никогда не учитывается.

Я могу ввести tab в NSDatePicker, но никогда не выйти из него, хотя nextKeyView установлен правильно.

Находясь внутри средства выбора, если я нажимаю клавишу tab, фокус правильно перемещается с текстовых полей «день», «месяц» и «год», но остается в текстовом поле «год» и никогда не переходит к элементу управления nextKeyView.

То же самое в обратном направлении, shift-tab работает корректно из года в месяц и изо дня в день, но застрял там внутри NSDatePicker.

Я предполагаю, что это ошибка NSDatePicker.

Как я могу создать подкласс (или любой другой тип решения), чтобы преодолеть эту проблему?

введите описание изображения здесь Кроме того, журнал следующей цепочки ключевых просмотров, просто чтобы доказать, что они установлены

 Initial first responder <NSTextField: 0x100587c60>
next key view <NSDatePicker: 0x6000035008f0>
next key view <NSComboBox: 0x100636740>
next key view <NSTextField: 0x10063e5a0>
next key view <NSTextField: 0x100587c60>
  

Комментарии:

1. Работает из коробки imgur.com/a/6DNo5eH

2. Ну, очевидно, не в моем случае. Я проверил, что nextKeyView был правильно установлен. Итак, я думаю, вопрос будет в том, что может помешать их работе? Я добавил захват экрана.

3. Как мы можем воспроизвести проблему в небольшом тестовом проекте?

4. Я постараюсь извлечь как можно меньше и предоставить его. Если это имеет значение, представление находится на листе, запускаемом переходом к раскадровке.

5. Я вижу tableview — разве у вас нет nsdatepicker в вашей tableviewcell? Я столкнулся с некоторыми проблемами в 10.12, но та же настройка работала в 10.14

Ответ №1:

Вот в чем загвоздка: контроллер, который управляет представлением, имеет keyDown: метод, потому что он должен реагировать на нажатие клавиши «удалить». Этот метод не вызывал [super keyDown: событие], если нажатая клавиша не была «удалить» (например, клавиша «tab»).

Добавление вызова super, когда ключ не должен обрабатываться контроллером, решило проблему.

Почему нажатие клавиши tab обрабатывалось правильно в некоторых случаях (например, когда фокус находится на текстовом поле), а не в других случаях (например, средство выбора даты), остается необъясненным.

Спасибо всем, кто оставил комментарии и помог мне разобраться в этом.