iOS: как заставить один контроллер вида отражать действия другого

Я пытаюсь "отразить" вид контроллера:

  1. Приложение создает экземпляр контроллера представления 1 (класса A)
  2. приложение создает контроллер представления 2 (также класса A) в другом UIWindow (внешнее отображение, через Airplay или физический разъем)
  3. любое событие касания, которое получает контроллер вида 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).

Мысли?

0 ответов

Другие вопросы по тегам