Могу ли я использовать представление контейнера в прототипе UITableViewCell

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

Итак, я сделал новый UIViewController в своей раскадровке, переместил туда все элементы управления и переместил поведение взаимодействия из моего подкласса UITableViewCell в новый. Теперь мне просто нужно поместить представление контейнера в ячейку прототипа в раскадровке и подключить переход для встраивания. Достаточно легко.

Чего я не знаю, как сделать, так это того, где будет создан экземпляр нового контроллера подвида (мой новый подкласс) и как я могу ссылаться на него из кода подкласса ячейки? Мне нужно передать некоторую информацию из свойств ячейки встроенному контроллеру представления. Я могу создать выход для представления контейнера в своей ячейке, но это для представления, а не для встроенного контроллера представления.


person Travis Griggs    schedule 06.01.2015    source источник
comment
Рассмотрите возможность простого использования подкласса UIView вместо подкласса UIViewController в этом случае. Вообще говоря, UIViewController используется, когда есть много разных элементов, которые могут быть связаны или не связаны в одном и том же визуальном пространстве. UIView больше подходит для набора элементов пользовательского интерфейса, которые будут появляться несколько раз.   -  person Ian MacDonald    schedule 06.01.2015
comment
Интересно, я на самом деле рассматривал пользовательский подкласс uiview и задавался вопросом, будет ли это более простым способом. Но даже если я это сделаю, мне все равно интересно, можно ли разумно встроить контроллер представления в прототип uitableviewcell.   -  person Travis Griggs    schedule 06.01.2015
comment
Я бы подозревал, что нет. Даже если у вас был доступ к контроллеру представления при создании ячейки, чтобы добавить ее в качестве дочернего контроллера представления вашего контейнера, вам также необходимо иметь доступ к нему, когда ячейка возвращается обратно в пул доступных ячейки для повторного использования, чтобы вы могли удалить контроллер представления из своего контейнера.   -  person Ian MacDonald    schedule 06.01.2015
comment
Пусть спекуляции прекратятся. Думаю, мне нужно было просто нажать кнопку компиляции. Компилятор выдает ошибку о том, что представления-контейнеры нельзя размещать в элементах, которые повторяются во время выполнения. Не уверен, что делать с этим вопросом нет. Вы должны сделать это своим ответом и получить за это признание. :)   -  person Travis Griggs    schedule 06.01.2015


Ответы (1)


Когда вы встраиваете контроллер представления в другой контроллер представления, вызывается метод контейнера viewController prepareForSegue: — здесь вы можете сохранить ссылку на файл segue.destinationViewController.

И в этом заключается проблема - prepareForSegue: не является методом UITableViewCell, поэтому не будет никакого способа захватить дочерний контроллер представления.

Конечно, как вы уже обнаружили, в любом случае вы получите ошибку компиляции!

person Ashley Mills    schedule 06.01.2015