2015-06-10 2 views
1

В приложениях Cocoa, когда редактируемый NSTextField имеет фокус, нажатие на другое Cocoa NSControl (например, слайдеры/кнопки) фокусируется на NSTextField. Я хотел бы удалить статус firstResponder для поля, тем самым закрыв редактируемое состояние.Как сделать редактируемые NSTextFields потерять фокус при нажатии кнопок?

Одно прямое решение состоит в том, чтобы вручную подклассифицировать каждый элемент управления так, чтобы щелчок манипулировал статусом firstResponder, но мне интересно, существует ли чистое решение без подкласса каждого используемого мной NSControl. Какие-нибудь лучшие решения?

+0

Подобный вопрос был задан много раз. –

+0

Из любопытства, почему вы хотите закончить редактирование? Если, например, просто заставить привязки обновляться с текущим значением, есть более эффективные способы. –

ответ

0

Решение, которое приходит мне на ум, предполагает прослушивание событий щелчка. Вы можете проверить, произошло ли событие клика вне поля вашего текста и если он сбрасывает статус первого ответчика.

Если вы хотите сделать что-то более сложное, вы можете добавить все элементы управления, которые хотите отменить статус первого ответчика текстового поля, на NSSet. Затем, всякий раз, когда вы регистрируете клик, вы можете проверить, находится ли клик в пределах любого из элементов этого набора.

+0

Я думаю, что проблема заключается в том, что NSControl захватывает события щелчка, поэтому вам действительно нужно добавить код ко всем возможным NSControl, чего я пытаюсь избежать. Пожалуйста, дайте мне знать, есть ли место, где я могу глобально наблюдать за кликами, поскольку это позволит мне проверить «если сфокусировано на текстовом поле и не-поле NSControl щелкнуло». –