Реагирующий элемент — это объект, которому известно, как получать непосредственно объекты типа UIEvent, упоминавшиеся в предыдущем разделе.

Об этом ему известно потому, что он является экземпляром класса UIResponder или его подкласса. Изучая иерархию классов Cocoa, можно обнаружить, что практически любой класс, имеющий отношение к отображению информации на экране, является реагирующим элементом. Так, реагирующими элементами являются классы UlView, UlWindow, UlViewController и даже UIApplication. В iOS 5 и более поздних версиях этой операционной системы реагирующим элементом оказывается делегат.

Как следует из документации на класс UIResponder, в нем реализованы следующие четыре низкоуровневых метода для получения объектов типа UIEvent, связанных с событиями касания: touchesBegan:withEvent:, touchesMoved:withEvent:, touchesEnded: withEvent: и touchesCancelled: withEvent:. Эти методы вызываются с целью уведомить реагирующий элемент о событии касания. Реагирующий элемент первоначально уведомляется одним из этих методов о произошедшем касании, независимо от того, каким образом в прикладном коде принимаются события касания пользователем экрана, — даже если эти события вообще не принимаются в прикладном коде, поскольку среда Cocoa автоматически реагирует на касание без вмешательства со стороны прикладного кода.

Сначала в механизме для передачи этих событий принимается решение, какого реагирующего элемента коснулся пользователь. Методы hitTest: withEvent: и pointlnside: withEvent: из класса UlView вызываются до тех пор, пока не будет найдено нужное представление, называемое представлением проверки касания. Затем вызывается метод sendEvent: из UIApplication, который, в свою очередь, вызывает метод sendEvent: из класса UlWindow, а тот — подходящий метод представления проверки касания (т.е. реагирующего элемента).

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

Исходное представление типа UlView (в данном случае представление проверки касания).

Контроллер типа UlViewController, управляющий этим представление типа UlView, если таковой имеется.

Родительское представление исходного представления типа UlView, а далее — его контроллер типа UlViewController, если таковой имеется. Это звено цепочки повторяется вверх по иерархии представлений до тех пор, пока не будет достигнуто следующее:

Класс UlWindow.

Класс UIApplication.

Делегат класса UIApplication.

 


 

 

 

Добавить комментарий