Есть ли способ закрыть всплывающее окно NSComboBox программно?NSComboBox close popup pogrammatically
Кажется, что ошибка с NSComboBox, когда всплывающее окно открыто, и элемент управления get удален, а затем выпущен. По какой-то причине dealloc NSComboBox не очищает всплывающее окно перед разрушением.
Редактировать: просто для пояснения - эта ошибка возникает только при вскрытии списка всплывающих окон. В противном случае управление будет выпущено правильно и чисто.
Редактировать Редактировать: Вот как воспроизвести его.
- Создайте новое приложение для какао.
- Отключить автоматический подсчет ссылок.
- В @ (applicationDidFinishLaunching) создайте новый NSComboBox и сохраните его члену.
- Добавьте поле со списком в окно содержимого окна.
- Создайте новый пункт меню с помощью сочетания клавиш и привяжите его к селектору.
- В селекторе элемента меню: снимите поле со списком с экрана и отпустите элемент. Не забудьте вернуть его в нуль.
- Запуск приложения.
- Нажмите на поле со списком, чтобы отобразить всплывающее окно.
- Используйте ярлык, чтобы удалить поле со списком.
Я хотел бы предположить, что вызов 'abortEditing' бы закрыть его. Я не уверен, что вы говорите «не очищать всплывающее окно перед разрушением». всплывающее окно является частью 'NSComboBox', поэтому, безусловно, должно быть выпущено. вы каким-то образом его сохраняете? –
Да, вы правы, что элемент управления должен уничтожать всплывающее окно при его выпуске, но это не так, - я думаю, что это ошибка. Легко реплицироваться с помощью чистого проекта. – AndyTang
@ (abortEditing) действительно работа! Однако он оставляет всплывающее окно висящим, поскольку оно не закрыло его, но оно больше не разбивается, поскольку оно не пытается получить доступ к тому, что уже было удалено из-за того, что @ (abortEditing) очищает некоторые вещи. – AndyTang