2014-10-24 5 views
2

Можно ли настроить собственный подкласс UIResponder? Мне нужно реализовать прослушиватель для UIEvent s (в частности, события удаленного управления), которые будут доставлены в течение всего жизненного цикла приложения.Пользовательский подкласс UIResponder

Я стараюсь избегать использования UIViewController s (будет отменен в какой-то момент) и AppDelegate (хотел бы не обременять его, если возможно), если это возможно.

+0

Кажется, что AppDelegate - идеальное место для размещения этого кода. Один из пунктов маркера, упомянутых в ссылке протокола AppDelegate, заключается в следующем: «Он реагирует на события, которые нацелены на приложение, и не зависит от ваших приложений или контроллеров представлений». Я не думаю, что вам следует беспокоиться об этом. – rdelmar

ответ

2

Очевидно, что вы можете подкласс UIResponder и вы можете сделать экземпляр этого подкласса. Проблема заключается в том, что этот экземпляр передается в цепочку ответчиков, так что его методы UIResponder фактически вызываются и таким образом, что остальная цепочка ответчиков не прерывается. Это может быть возможно - я, конечно, сделал это в Cocoa на рабочем столе, хотя никогда не был в UIKit на устройстве iOS, но вы бы сделали намного лучше, на мой взгляд, чтобы дать некоторую интроспективную мысль, почему у вас есть это своеобразное отвращение к помещая код, куда он явно хочет пойти (в UIViewController или в делегате приложения).

+0

Я не уверен, что это уверенность в том, что эта ответственность принадлежит делегату приложения. Это настраиваемые события, которые, вероятно, должны обрабатываться пользовательским объектом (а не воронкой через AD), подобно событиям поворота или событиям касания. – raheel

+0

Но это тривиальная точка архитектурной эстетики; вы всегда можете разбить эту функциональность на вспомогательный объект, принадлежащий делегату приложения или контроллеру представления (см. _Design Patterns_). Не в этом дело. Дело в том, что Cocoa - это _framework_: это означает, что вы должны поместить свой код там, где он действительно будет вызван. Точка входа в контроллер просмотра или делегат приложения - это то, где будет вызываться ваш код. Используйте его и двигайтесь дальше. – matt

+1

Конечно, я не собираюсь бороться с каркасом. Вы спрашивали меня о причине, почему я надеялся сделать более чистый перерыв. «Особое отвращение» указывало, что вы хотели, чтобы я уточнил. Это может быть тривиально, но если бы это было возможно, я бы использовал его. Отсюда исходный вопрос. – raheel