故事板:如何将单个视图链接到多个容器视图?

我的目标:

我正在使用故事板在我的应用程序中创build视图。

我的目标是在应用程序的所有页面中显示一个视图的单个实例。 在我的情况下,如果有一个应用程序与许多选项卡,我希望该视图将出现在所有选项卡,并具有相同的状态。

我的尝试和做到这一点:

我创build了一个视图,并将其embedded到不同选项卡中的容器视图中。

当打开应用程序时,视图出现在所有页面上并工作。 但是,如果我在一个视图中进行更改,它不会传播到其他视图。

换句话说,在下面的示例中,如果我在一个页面中更改开关的状态,那么当我导航到其他页面(在我的应用程序中,我有选项卡来执行此操作)时,不会显示该更改。 在这里输入图像说明

我看到“特质”下有一个“链接”选项,但是没有帮助。

我怎样才能确保在所有标签中只有一个视图的瞬间?

干杯!

正如我在我的评论中所说,你不能用segues来做这件事,因为它们总是创build新的实例。 所以,我想你将不得不将代码中的子控制器添加到每个需要它的控制器。 在故事板中,您可以为需要充当占位符的embedded式控制器的每个控制器添加子视图。 为控制器提供一个自由forms的开关,并将其大小设置为与添加到其他控制器的子视图相同的大小,然后取消选中“从NIB调整视图大小”框。 这是一个故事板的例子,

在这里输入图像说明

在代码中,您需要在viewDidAppear中添加控制器,并在viewDidDisappear中将其删除(以便将其添加到下一个控制器 – 它不能同时在两个位置)。 在控制器中,您将使用开关创build控制器实例,并在所有其他控制器中获得对同一实例的引用。 所以,在第一个控制器中,

- (void)viewDidLoad { [super viewDidLoad]; self.embed = [self.storyboard instantiateViewControllerWithIdentifier:@"SharedVC"]; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self addChildViewController:self.embed]; [self.container addSubview:self.embed.view]; } -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [self.embed.view removeFromSuperview]; [self.embed willMoveToParentViewController:nil]; [self.embed removeFromParentViewController]; } 

在所有其他的控制器中,你需要在viewDidAppear(viewDidDisappear和第一个控制器中的相同)中这样的东西,

 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.embed = [(FirstViewController *)self.tabBarController.viewControllers[0] embed]; [self addChildViewController:self.embed]; [self.container addSubview:self.embed.view]; }