Раскадровка - создание нескольких просмотров в раскадровке для одного и того же ViewController

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

Мои вопросы:

  • Можем ли мы создать два представления в раскадровке для тех же ViewController? Если да, то как?
  • Мне нужно видеть два Представления бок о бок, чтобы я мог вносить в них изменения отдельно. Наличие их в качестве подменю основного вида будет загружать оба представления во время выполнения. Я хочу иметь возможность загружать только одно из просмотров в зависимости от того, кто вошел в систему.

Заранее благодарим за помощь

Ответы

Ответ 1

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

@property (retain, nonatomic) IBOutlet UIView *leftView;
@property (retain, nonatomic) IBOutlet UIView *rightView;

Когда левый сегмент сегментарного элемента управления был нажат, правый экран был скрыт (setHidden: TRUE), а leftView не был скрыт. Обратное для правого сегмента.

Чтобы показать представление из другого ViewController внутри одного из приведенных выше представлений, в "основном" контроллере представления я создал IBOutlet для каждого вторичного ViewController

@property (retain, nonatomic) IBOutlet CustomViewController1 *leftViewController;
@property (retain, nonatomic) IBOutlet CustomViewController2 *rightViewController;

Макеты контроллеров вторичного представления должны соответствовать "первичному" контроллеру с точки зрения появления элементов навигации, статусов и элементов таблеток.

Затем мне пришлось создавать их из раскадровки вручную в ViewDidLoad на "основном" контроллере представлений.

self.leftViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomViewControllerOne"];
self.rightViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomViewControllerTwo"];

Где "CustomViewControllerOne" и "CustomViewControllerTwo" являются значениями полей "идентификатор" контроллеров в раскадровке, которые я должен был ввести.

Снова в ViewDidLoad на "основном" контроллере я добавил представления Controller в виде подвидных тех, которые я скрывал и скрывал на основе управления сегментом

[self.leftView addSubview:leftViewController.view];
[self.rightView addSubview:rightViewController.view];

Я обнаружил, что если бы я попытался добавить их в качестве подзонов основного представления без создания двух контейнеров вида (leftView и rightView), вторичные контроллеры представлений были смещены в "основном" контроллере.

Итак, когда пользователь нажал левый сегмент, появился вид из CustomViewController1, и когда они нажали правый сегмент, появился вид из CustomViewController2.