2015-06-05 2 views

ответ

2

В целом вы должны попытаться обработать события в самом глубоком месте. Например, если ваше окно имеет NSButton, тогда эта кнопка должна взять на себя ответственность за обработку кликов на себя, а не на окно! Конечно, у NSButton есть API для этого, например setAction:.

Есть некоторые виды, содержимое которых непрозрачно для Cocoa, где вы хотите взять на себя ответственность за отправку событий. Примером может служить NSOpenGLView, где вы визуализируете некоторую сцену и должны направлять события на компоненты в сцене. Совет по-прежнему применяется: переопределить обработчики событий в NSOpenGLView (mouseDown: и т. Д.) И отправить оттуда.

Доступны методы более высокого уровня, такие как [NSWindow sendEvent]. Уместно переопределить их, если вы хотите вмешаться в отправку событий для всего окна, например перенаправление событий в другие окна. В общем, это не обязательно, и делает ваше приложение более хрупким.

NSViewController играет уменьшенную роль на рабочем столе (по сравнению с UIKit) и редко требуется.

+0

Вы имеете в виду, что '@IBAction func button_pressed (отправитель: AnyObject)' является плохой практикой? – RomaValcer

+1

Цели/действия, как правило, направлены на объекты в слое контроллера. NSWindowController и NSViewController - хорошие кандидаты. Я говорил конкретно о событиях, т. Е. NSEvent. –

1

Вы можете использовать NSWindowController или NSViewController в зависимости от необходимости. Если вы настраиваете поведение окна, используйте только NSWindow.

+0

С чем связано NSViewController? – RomaValcer

+0

@ RomaValcer Этот [ответ] (http://stackoverflow.com/questions/5174871/should-i-use-an-nsviewcontroller-for-this) может вам помочь. – Raviprakash