自定义容器视图控制器+故事板?

3
我想要实现自己的容器视图控制器。 请想象这是我的iPad。
类似于常规的分割视图控制器,但我想要扩展它:视图“A”的宽度应该可以调整大小,当我点击视图'B'时,视图'C'会进入可见区域。
例如,在我的Storyboard中,我有3个容器视图:AViewController(用于A视图),BViewController,CViewController和一个组合视图控制器(初始视图控制器)。 在组合视图控制器中,我将从容器视图实现嵌入Segue,并通过以下代码初始化容器视图之间的关系:
@property ... *aViewController,*bViewController,*cViewController;
    - (void)prepareForSegue:(UIStoryboardSegue *)segue
    sender:(id)sender
    {
    if ([segue.identifier isEqualToString:@"EmbedAViewController"])
    {
    self.aViewController =
    segue.destinationViewController;
    }
    if ([segue.identifier isEqualToString:@"EmbedBViewController"])
    {
    self.bViewController=segue.destinationViewController
    }

   -(void)viewDidLoad
   {
     [super viewDidLoad];
     self.aViewController.bViewController=self.bViewController;
   }

问题1:使用storyboards实现我的任务是正确的方式吗? 问题2:容器视图有哪些限制?它是addChildViewController API的可视化替代品吗?如果不是,在哪里应该实现子父关系?我应该在prepareForSegue方法中使用它来实现我的组合视图控制器。

 [self addChildViewController:aViewController]; 
    [self.view addSubview:aViewController.view];

问题3: 如何在开始时将容器视图放置在可见区域之外?

如果我在某个地方犯了错误或者对基本概念有很大的误解,请不要打击我。我做了很多谷歌搜索,非常感谢任何帮助。提前致谢!

编辑:
我想建立它们之间的关系。 "B" 视图的内容取决于 "A",而 "C" 视图的内容取决于 "B"。

1个回答

5

我认为你有一些误解。如果您想在故事板中实现容器视图控制器,则不需要在代码中进行任何操作。从一个控制器开始,即您称之为组合视图控制器的控制器,并拖入3个容器视图。最初,您可能希望调整它们的大小,以便它们都具有全高度,并使它们全部适合主视图旁边。然后,您可以使用大小检查器更改它们的大小和位置,以使C的视图从组合控制器视图的右边缘开始,这样它将一开始就不会显示在屏幕上。您将自动获得三个视图控制器,分别连接到其各自的容器视图,使用嵌入式segue。这三个控制器将与组合控制器同时实例化。您需要在组合控制器中为其每个容器视图创建出口,以便您可以根据需要在代码中调整其大小。


谢谢你的回答!我想建立“A”和“B”之间的关联。 "B" 视图的内容取决于在 "A" 视图中选择了什么。 - Neil Galiaskarov
实际上,它是有效的。我在'A'是表视图控制器和'B'是简单UI视图控制器时使用了它。我没有遇到任何问题就在它们之间传递数据了。我想知道如果我继续这样做,是否会有很多陷阱? - Neil Galiaskarov
1
@НаильГалиаскаровб,这取决于您如何从一个控制器引用另一个控制器。A、B和C都将是组合视图控制器的子视图控制器,因此您可以从childViewControllers属性中获取对它们的引用。 - rdelmar
那是其中一个问题。如果我放置容器视图'A',这意味着它是组合视图控制器的子视图控制器,并且它是父子关系的可视化替代? - Neil Galiaskarov
@НаильГалиаскаров,我不知道——它不应该是空的。你设置它们的方式或者尝试访问它们的位置肯定有问题。你在哪里有那个日志? - rdelmar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接