Объект респондента

Респондент является объектом, который может реагировать на события и обработать их. Все объекты респондента являются экземплярами классов, в конечном счете наследовавшихся от NSResponder (Платформа AppKit) или UIResponder (Платформа UIKit). Эти классы объявляют программируемый интерфейс для обработки событий и определяют поведение по умолчанию для респондентов. Видимые объекты приложения являются почти всегда респондентами — например, окна, представления, и средства управления — и объект приложения являются респондентом также. В iOS, контроллеры представления (UIViewController объекты), также объекты респондента.

Art/responder.jpg

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

Первый респондент получает некоторые события сначала

В приложении респондент возражает, что сначала получает много видов событий, известен как первый респондент. Это получает ключевые события, сообщения действия и другие виды событий такой как, в UIKit, движении и событиях дистанционного управления. (События от нажатия мыши и мультисенсорные события сначала переходят к представлению, находящемуся под указателем мыши или пальцем; то представление могло бы или не могло бы быть первым респондентом.) Первый респондент обычно является представлением в окне, что приложение считает подходящим лучше всего для обработки события. Для получения события респондент должен также указать его готовность стать первым респондентом; это делает это по-разному для каждой платформы:

// OS X
- (BOOL)acceptsFirstResponder { return YES; }
 
// IPhone OS
- (BOOL)canBecomeFirstResponder { return YES; }

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

Цепочка респондента включает совместную обработку событий

Если первый респондент не может обработать событие или сообщение действия, это вперед оно “следующему респонденту” в соединенном ряду вызвало цепочку респондента. Цепочка респондента позволяет объектам респондента передать ответственность за обработку события или сообщения действия к другим объектам в приложении. Если объект в цепочке респондента не может обработать событие или действие, это снова посылает сообщение следующему респонденту в цепочке. Сообщение перемещается цепочка к объектам более высокого уровня, пока это не обрабатывается. Если это не обрабатывается, приложение отбрасывает его.

Art/responder_chain.jpg

Путь события. Общий путь события цепочка респондента запускается с целью — первый респондент или представление под указателем мыши или пальцем. Оттуда, это продолжает иерархию представления к объекту окна и затем к глобальному объекту приложения. Однако цепочка респондента для событий в iOS добавляет изменение к этому пути: Если представлением управляет контроллер представления и если представление не может обработать событие, контроллер представления становится следующим респондентом.

Путь сообщения действия. Для сообщений действия и OS X и iOS расширяют цепочку респондента до других объектов. В OS X цепочка респондента для сообщений действия отличается для приложения на основе архитектуры документа, приложения, использующего контроллеры окна (NSWindowController), и приложение, не соответствующее ни одной из тех категорий. Кроме того, если приложение Mac имеет и ключевое окно и главное окно, цепочку респондента, вдоль которой сообщение действия перемещения могли бы включить иерархии представления обоих окон.

Необходимые как условие статьи

Категорическое обсуждение

    Руководство по обработке событий какао

Проекты примера кода

  • ClockControl
  • Рискованный