2016-07-23 23 views
0

Я читаю документацию класса UIResponder, и я наткнулся на цепочку ответчиков. Теперь говорят, что, например, когда хитовый тест не может обработать событие, он передает ему цепочку ответчиков. Итак, какой пример может прояснить, как нельзя обрабатывать событие?Что значит, когда говорится, что «событие невозможно обработать»?

ответ

1

Из Event Handling Guide for iOS

Если исходный объект-либо вид хита-тестирование или первый ответчик-не обрабатывать событие, UIKit передает событие к следующему ответчику в цепочке. Каждый ответчик решает, хочет ли он обработать событие или передать его вместе со своим следующим ответчиком, вызвав метод nextResponder. Этот процесс продолжается до тех пор, пока объект-ответчик не обработает событие или больше не будет реагировать.

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

Там также важное замечание в нижней части этого раздела:

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

Аналогично для самого общего случая, когда ваш Ответчик является UIView подклассом работы с сенсорными событиями, все эти методы включают в себя:

по умолчанию реализации этого метода ничего не делает. Однако непосредственные подклассы UIKit UIResponder, особенно UIView, пересылают сообщение в цепочку ответчиков. Чтобы отправить сообщение следующему ответчику, отправьте сообщение супер (реализация суперкласса); не отправляйте сообщение непосредственно следующему ответчику. Например,

[super touchesBegan:touches withEvent:event];

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

+0

Итак, почему ответчик не сможет справиться с этим, поэтому в этом случае я передаю его следующему? Я думаю, он отличается в зависимости от типа события, но мне нужен пример для него. thanks – Badr

+0

Рассмотрите игровое поле. Отдельная фигура на игровом поле может реагировать на события касания, чтобы она могла реагировать на жест нажатия, но вам может потребоваться, чтобы ручка переключения передач или перетаскивания была обработана, чтобы она могла управлять взаимодействием между кусками. – Jonah

+0

все в порядке, так что это согласно цели кодера, если он хочет, чтобы этот ответчик или другой человек справлялись с этим событием? – Badr