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

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

Реагирующий элемент не реализует подходящий метод.

Реагирующий элемент реализует подходящий метод для вызова метода суперкласса.

Например, в простейшем классе UlView отсутствует собственная реализация методов обработки событий касания. Поэтому такое событие по умолчанию “проскакивает” представление типа UlView, даже если это представление проверки касания, и передается вверх по цепочке реагирующих элементов в поисках того элемента, который на него отреагирует. В некоторых случаях оказывается вполне логичным и оправданным переложить ответственность за обработку события касания на основное фоновое представление или даже на контроллер типа UlViewController, который им управляет.

Одно из моих приложений представляет собой игру в составление картинки-загадки, где прямоугольная фотография разделяется на мелкие части, которые затем перемешиваются в произвольном порядке. В качестве фонового представления в этом приложении служит подкласс Board, производный от класса UlView. Отдельные части картинки-загадки представлены типичными объектами класса UlView и являются дочерними представлениями по отношению к представлению типа Board. О том, как должна реагировать на касание каждая часть картинки-загадки, известно в представлении типа Board, где также известно общее расположение частей картинки-загадки. Следовательно, эти части не должны содержать никакой логики для обнаружения касания. Это обстоятельство позволило мне выгодно воспользоваться перекладыванием ответственности в цепочке реагирующих элементов, чтобы не реализовывать в частях картинки-загадки никаких методов обработки событий касания, а передавать эти события вверх по цепочке представлению типа Board, где обнаруживается касание и обрабатывается нажатие, а затем выбранной таким образом части картинки-загадки сообщается, что именно ей нужно делать. Пользователю, конечно, ничего об этом не известно. Он просто касается части картинки-загадки, а она реагирует на его касание.


 

 

 

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