故事板 - 在同一个ViewController的storyboard中创建多个视图

时间:2012-02-20 05:32:30

标签: ipad storyboard

我正在使用故事板设计iPad应用程序。我有ViewController显示视图。我的问题是,当管理员看到该屏幕时,他应该看到某个视图,而当用户看到该屏幕时,他应该看到另一个视图。我以为我应该为同一个屏幕创建两个视图,并根据谁记录它来加载适当的视图。但是,虽然我可以在以前的iOS版本的XIB文件中执行此操作,但故事板不允许我在ViewController之外创建视图,因此我无法设计多个视图。

我的问题是:

  1. 我们可以在故事板中为同一ViewController设计两个视图吗?如果是,那怎么样?
  2. 我需要并排查看两个视图,以便我可以单独更改它们。将它们作为主视图的子视图将在运行时加载两个视图。我希望能够只加载其中一个视图,具体取决于谁已登录。
  3. 提前感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您可以在另一个中显示一个故事板控制器的视图,但这很棘手。我在故事板中有一个标签视图控制器,其中一个视图有一个NavBar,其上有一个分段控件,用于确定控制器中出现两个视图的哪个视图。我将其称为“主要”控制器。我所做的是在“主”控制器上,在主视图中,我在导航栏和标签栏之间添加了两个彼此叠加的视图,并将IBOutlet连接到它们。

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

当按下分段控件的左段时,隐藏了rightView(setHidden:TRUE)并且取消隐藏了leftView。反之亦然,对于正确的细分市场。

要在上面的一个视图中显示来自另一个ViewController的视图,在“主”视图控制器中,我为每个辅助ViewController创建了一个IBOutlet

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

辅助视图控制器的布局必须在导航栏,状态栏和tabbar项的外观方面与“主”控制器匹配

然后,我必须在“主”视图控制器上的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的视图。