Не отвечающие элементы пользовательского интерфейса после закрытия NSWindow

На прошлой неделе я потратил много времени на возни со следующей проблемой. Я решил это, но так как я не мог найти ответ здесь, и я хочу поделиться своим решением для всех, кто сталкивается с этим.


Проблема: мое приложение работает в фоновом режиме (menubar) и его основной NSWindow содержит все настройки моего приложения. Вы закрываете NSWindow нажав кнопку закрытия в верхнем левом углу. После закрытия NSWindow и вновь открыв это, все NSControlс визуально не отвечали. Действия работали соответственно, но они не обновлялись.

Я попробовал следующее:

  • Снятие отметки "Отпустить при закрытии" в IB для NSWindow
  • перезарядка NSWindow из НИБ
  • Сильные ссылки для всех NSControls
  • Звонок "Стань первым респондентом" на NSControls
  • Перезагрузка всех родителей NSViews
  • Реализация всех делегатов, соединяющих каждый NSControl (Работал на NSControl, но было слишком много работы, чтобы использовать его для всех и каждого)
  • Отключение, а затем повторное включение NSControls

Я опубликую свое решение ниже для записей.

1 ответ

Решение

Моим решением этой проблемы было создание подкласса NSWindow и переписать следующие методы:

- (void)performClose:(id)sender{
    [self orderOut:nil];
}

- (void)close{
    [self orderOut:nil];
}

Теперь NSWindow скрыт / упорядочен, и вам просто нужно вернуть его обратно при отображении.

Другие вопросы по тегам