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

inf*_*eqd 14 storyboard ipad

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

我的问题是:

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

在此先感谢您的帮助

nh3*_*2rg 3

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

@property (retain, nonatomic) IBOutlet UIView *leftView;
@property (retain, nonatomic) IBOutlet UIView *rightView;
Run Code Online (Sandbox Code Playgroud)

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

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

@property (retain, nonatomic) IBOutlet CustomViewController1 *leftViewController;
@property (retain, nonatomic) IBOutlet CustomViewController2 *rightViewController;
Run Code Online (Sandbox Code Playgroud)

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

然后,我必须在“主”视图控制器上的 ViewDidLoad 中手动从故事板实例化它们。

self.leftViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomViewControllerOne"];
self.rightViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomViewControllerTwo"];
Run Code Online (Sandbox Code Playgroud)

其中“CustomViewControllerOne”和“CustomViewControllerTwo”是我必须输入的故事板中控制器的“标识符”字段值。

再次在“主”控制器上的 ViewDidLoad 中,我将控制器视图添加为我基于段控件隐藏和取消隐藏的视图的子视图

[self.leftView addSubview:leftViewController.view];
[self.rightView addSubview:rightViewController.view];
Run Code Online (Sandbox Code Playgroud)

我发现,如果我尝试将它们添加为主视图的子视图而不创建两个视图容器(leftView 和 rightView),则辅助视图控制器会在“主”控制器中出现偏移。

因此,当用户按下左侧部分时,会出现 CustomViewController1 中的视图,而当用户按下右侧部分时,会出现 CustomViewController2 中的视图。