Objective-C Копирование представления - PullRequest
3 голосов
/ 27 июня 2011

Итак, у меня здесь быстрый вопрос ...

У меня есть экземпляр объекта контроллера представления, давайте назовем его viewCon1, и на нем размещено несколько подпредставлений, каждое суникальные свойства.Позволяет называть их sub1, sub2 и sub3.Теперь я добавляю каждое из этих подпредставлений программно, делая что-то в такой степени:

//create the subviews
TaskUIButton *sub1 = [[TaskUIButton alloc] init];
TaskUIButton *sub2 = [[TaskUIButton alloc] init];
TaskUIButton *sub3 = [[TaskUIButton alloc] init];

//add them to viewCon1
[viewCon1.view addSubView:sub1];
[viewCon1.view addSubView:sub2];
[viewCon1.view addSubView:sub3];

Теперь я не знаю, как действовать дальше.Мне нужно создать еще один объект контроллера вида с именем viewCon2 и сделать его точно таким же, как viewCon1, к которому присоединены идентичные (отдельные отдельные) подвиды.Например, предположим, что viewCon1 sub1 имеет заголовок "foo", мне нужно viewCon2, чтобы иметь идентичное подпредставление с заголовком "foo" и т. Д.

Есть ли простой способ сделать это?

Буду признателен за понимание, спасибо!

1 Ответ

6 голосов
/ 27 июня 2011

Ни UIViewController, ни UIView не реализуют протокол NSCopying, поэтому дублирование таких объектов - это не просто одношаговый процесс. Общая идея заключается в создании нового экземпляра рассматриваемого класса и копировании конфигурации исходного объекта.

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

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

...