8

我正在尝试使用新的情节提要功能,但是我对情节提要关系感到困惑?它们与 IBOutlets 有何不同?

另外,如何将我自己的关系添加到我自己的 UIViewController 子类中?

我曾尝试查看文档,但找不到太多关于它们的信息。

4

3 回答 3

9

我理解它的方式是:关系是 iOS 表示“父子”关系的方式,虽然这看起来确实是递归的,但父子关系的一个示例是包含 UIViewController 的 UIViewController 容器。

无论如何,这就是理论——使用 UINavigationController 可以更好地理解。它被称为“容器”,因为它在“堆栈”隐喻中包含尽可能多的常规 UIViewController,因此您可以进行正常的 UITableView 向下钻取和弹出。

关键是 UINavigationController 和堆栈中的第一个 UIViewController 之间的 segue 存在“关系”,而所有其余 UIViewControllers 之间的 segue 只是一个常规的 push segue。

在 UISplitViewController 中也很明显——它需要两个视图控制器(有时称为内容视图控制器)从启动开始,它们连接在父 UISplitViewController(容器)和两个常规(内容)视图控制器之间

(因此关系不像 IBOutlets,而更像是 segues——它们甚至在标准视图控制器容器的“segues”类别中)

现在 - 我们不允许子类化标准视图控制器容器,但我们可以创建自定义视图控制器容器,但我不能在我的自定义视图控制器容器中定义关系!!!!!! !!!!!!

所以:“我可以在我自己的控制器中使用它们吗?” 答案尚不清楚(至少对我来说,文档最多也很薄)

于 2012-01-23T14:41:48.440 回答
1

像这样创建 UIStoryboardSegue 的子类:

@implementation JTARelationshipSegue

- (void)perform
{
  return;
}

@end

在您的两个对象之间进行自定义 segue 并将类设置为 JTARelationshipSegue。在您的视图控制器中,让视图控制器像这样执行 segue:

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

您需要在界面生成器中将 segues 标识符设置为 addChild。

prepareForSegue:sender实施,以便将 segues 目标视图控制器添加为当前视图控制器的子级,如下所示:

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

您需要为要创建的每个子项设置不同的 segue 标识符(或另一种标识特定视图控制器的方式。

这将使您的故事板文件看起来更漂亮,更具可读性,但是您最好只加载其他视图控制器并将它们作为子视图添加到您的视图中做加载方法:

- (void)viewDidLoad
{
   [self addChildViewController:
         [[self storyboard] 
          initiateViewControllerWithIdentifier:@"myIdent"]];
...
}
于 2013-08-22T15:25:20.193 回答
-1

I wrote a few tutorials on how to use storyboards over on my site...

Part 1 of tutorial

Part 2 of tutorial

Perhaps that will help a little bit? In essence, the Segue relationships provides an identifier for the link between two items on your storyboard. You can use these identifiers to manage how things work.

于 2011-11-13T20:34:32.130 回答