#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 обрабатывалось правильно в некоторых случаях (например, когда фокус находится на текстовом поле), а не в других случаях (например, средство выбора даты), остается необъясненным.
Спасибо всем, кто оставил комментарии и помог мне разобраться в этом.