Раскадровка отношений в iOS - PullRequest
8 голосов
/ 14 ноября 2011

Я пытаюсь использовать новую функцию раскадровки, однако я не совсем понимаю, как работают раскадровки? Чем они отличаются от IBOutlets?

Кроме того, как я могу добавить свои собственные отношения в мой собственный подкласс UIViewController?

Я пытался посмотреть в документации, но не могу найти о них много.

Ответы [ 3 ]

9 голосов
/ 23 января 2012

Я так понимаю: отношения - это способ iOS представлять «родитель-потомок» отношение , и хотя это кажется довольно рекурсивным, примером отношений «родитель-ребенок» является контейнер UIViewController, содержащийUIViewController.

В любом случае, это теория - лучше понять, используя UINavigationController.Он называется «контейнером», потому что он содержит столько же регулярных UIViewController в метафоре «стека», что позволяет выполнять обычные детализации и всплытия UITableView.

Ключевым моментом является то, что переход между UINavigationController ипервый UIViewController в вашем стеке, есть «связь», в то время как переход между всеми остальными UIViewControllers - это просто обычный push-переход.

То же самое очевидно в UISplitViewController - ему нужны два контроллера представления(иногда называемые контроллерами представления контента) с момента запуска, и они подключаются между родительским UISplitViewController (контейнером) и двумя обычными (контентными) контроллерами представления

(таким образом, отношения не похожи на IBOutlets, но больше похожи на segues -они даже находятся в категории «сегменты» стандартных контейнеров контроллера представления)

Теперь - нам не разрешено создавать подклассы стандартных контейнеров контроллера представления, но нам разрешено создавать пользовательские контакты контроллера представленияно я не могу на всю жизнь определить отношения в моем контейнере контроллера пользовательского представления !!!!!!!!!!!

так: "Могу ли я использовать их в своих собственных контроллерах?"ответ пока неизвестен (по крайней мере мне, а документация в лучшем случае тонкая)

1 голос
/ 22 августа 2013

Создайте подкласс UIStoryboardSegue, как это:

@implementation JTARelationshipSegue

- (void)perform
{
  return;
}

@end

Создайте пользовательский переход между двумя вашими объектами и установите класс JTARelationshipSegue. В вашем контроллере вида заставьте контроллер представления выполнить следующее:

- (void)viewDidLoad
{
  ...
  [self performSegueWithIdentifier:@"addChild" sender:self];
}

Вам необходимо установить идентификатор сегмента в конструкторе интерфейсов для addChild.

Impement prepareForSegue:sender, так что он добавляет контроллер представления назначения сегментов как дочерний элемент текущего контроллера представления, например:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  UIViewController *destination = [segue destinationViewController];
  [self addChildViewController:destination];
  ...
}

Вам потребуется отдельный идентификатор segue для каждого дочернего элемента, которого вы хотите создать (или другой способ определения конкретного контроллера представления.

Это сделает ваш файл раскадровки более красивым и более читабельным, однако вам может быть лучше просто загрузить другие контроллеры представления и добавить их как дочерние элементы в вашем представлении, которые загружали метод:

- (void)viewDidLoad
{
   [self addChildViewController:
         [[self storyboard] 
          initiateViewControllerWithIdentifier:@"myIdent"]];
...
}
0 голосов
/ 14 ноября 2011

Я написал несколько уроков о том, как использовать раскадровки на моем сайте ...

Часть 1 урока

Часть 2 урока

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

...