iOS: как заставить один контроллер вида отражать действия другого
Я пытаюсь "отразить" вид контроллера:
- Приложение создает экземпляр контроллера представления 1 (класса A)
- приложение создает контроллер представления 2 (также класса A) в другом UIWindow (внешнее отображение, через Airplay или физический разъем)
- любое событие касания, которое получает контроллер вида 1, должно быть имитировано на контроллере вида 2
У меня есть часть этой работы над такими вещами, как MkMapViews
и простые контроллеры представления, просто перехватывая такие вещи, как изменения региона или прокручивая в vc1 и говоря vc2, чтобы установить его регион или прокручивая в эту позицию, имея IBActions UIControl на vc1, также вызывая то же действие в vc2 и т. д.
Это работает с простыми случаями, но проблема приходит со сложными контроллерами представления, которые имеют такие вещи, как UITableViews
с обычаем UITableViewCells
это расширение / сжатие и т. д. Я обнаружил, что должен реализовать каждый возможный делегат / действие и сделать кучу объектов осведомленными о вещах, о которых они не должны знать, что кажется неправильным, если я собираюсь сделать это вообще многоразовые.
Я пытался пройтись по дереву subview vc1 и использовать objc_setAssociatedObject()
связать UIResponders в экземплярах контроллера представления друг с другом, но мне все еще нужно перехватить каждый делегат / действие на vc1, чтобы найти UIResponder
на vc2, чтобы имитировать событие. Должен быть более простой способ сделать это. Я пробовал создавать подклассы UIWindow
и переопределение sendEvent
и отправка события на внешний дисплей UIWindow
как хорошо, но каждый UIEvent
кажется, есть информация, которая связывает его с UIWindow
он возник в качестве внешнего дисплея UIWindow
ничего не сделал с этим, когда я послал это.
Как бы я сделал это таким образом, чтобы я мог абстрагировать зеркалирование в хороший подкласс или что-то подобное, чтобы мне не приходилось засорять каждый контроллер представления кодом специального случая? Я размышлял о стремительных событиях касания UIView, но я даже не уверен, поможет ли это, поскольку UITouches и UIEvents привязаны к тому UIWindow, из которого они возникли, а UIEvent, кажется, не дает мне возможности создать свой собственный событие.
ПРИМЕЧАНИЕ: я пытаюсь не использовать зеркальное отображение Airplay по умолчанию, так как я хочу, чтобы во внешнем дисплее использовалось полное разрешение экрана и размеры. Идея состоит в том, чтобы приложение iPhone могло работать на самом устройстве (то есть выше его ширины), одновременно предоставляя возможность работы с внешним дисплеем, предназначенным для этого дисплея (шире, чем оно выше, большее разрешение, возможности для представить информацию в более удобочитаемом формате HDTV).
Мысли?