Объект респондента
Респондент является объектом, который может реагировать на события и обработать их. Все объекты респондента являются экземплярами классов, в конечном счете наследовавшихся от UIResponder
(iOS) или NSResponder
(OS X). Эти классы объявляют программируемый интерфейс для обработки событий и определяют поведение по умолчанию для респондентов. Видимые объекты приложения являются почти всегда респондентами — например, окна, представления, и средства управления — и объект приложения являются респондентом также. В iOS, контроллеры представления (UIViewController
объекты), также объекты респондента.
Для получения событий респондент должен реализовать надлежащие методы обработки событий и, в некоторых случаях, сказать приложению, что это может стать первым респондентом.
Первый респондент получает некоторые события сначала
В приложении респондент возражает, что сначала получает много видов событий, известен как первый респондент. Это получает ключевые события, события движения и сообщения действия, среди других. (События от нажатия мыши и мультисенсорные события сначала переходят к представлению, находящемуся под указателем мыши или пальцем; то представление могло бы или не могло бы быть первым респондентом.) Первый респондент обычно является представлением в окне, что приложение считает подходящим лучше всего для обработки события. Для получения события респондент должен также указать его готовность стать первым респондентом; это делает это по-разному для каждой платформы:
// OS X |
- (BOOL)acceptsFirstResponder { return YES; } |
//iOS |
- (BOOL)canBecomeFirstResponder { return YES; } |
В дополнение к получению сообщений о событиях респондент может получить сообщения действия, не имеющие никакой указанной цели. (Сообщения действия отправляются средствами управления, такими как кнопки и средства управления, когда пользователи управляют ими.)
Цепочка респондента включает совместную обработку событий
Если первый респондент не может обработать событие или сообщение действия, это вперед оно “следующему респонденту” в соединенном ряду вызвало цепочку респондента. Цепочка респондента позволяет объектам респондента передать ответственность за обработку события или сообщения действия к другим объектам в приложении. Если объект в цепочке респондента не может обработать событие или действие, это передает сообщение следующему респонденту в цепочке. Сообщение перемещается цепочка к объектам более высокого уровня, пока это не обрабатывается. Если это не обрабатывается, приложение отбрасывает его.
Путь события. Общий путь события цепочка респондента запускается с целью — первый респондент или представление под указателем мыши или пальцем. Оттуда, это продолжает иерархию представления к объекту окна и затем к глобальному объекту приложения. Однако цепочка респондента для событий в iOS добавляет изменение к этому пути: Если представлением управляет контроллер представления и если представление не может обработать событие, контроллер представления становится следующим респондентом.
Путь сообщения действия. Для сообщений действия и OS X и iOS расширяют цепочку респондента до других объектов. В OS X цепочка респондента для сообщений действия отличается для приложения на основе архитектуры документа, приложения, использующего контроллеры окна (NSWindowController
), и приложение, не соответствующее ни одной из тех категорий. Кроме того, если приложение на OS X имеет и ключевое окно и главное окно, цепочку респондента, вдоль которой сообщение действия перемещения могли бы включить иерархии представления обоих окон.