我的目标:
我正在使用故事板在我的应用程序中创建视图。
我的目标是拥有一个可在应用程序的所有页面中公开和链接的视图实例。在我的情况下,如果有一个包含许多选项卡的应用程序,我希望该视图将出现在所有选项卡中并具有相同的状态。
我的尝试和做法:
我创建了一个视图并将其嵌入到不同标签中的容器视图中。
打开应用时,视图会在所有页面上显示并起作用。但是,如果我在一个视图中进行更改,则它不会传播到其他视图。
换句话说,在下面的示例中,如果我在一个页面中更改了开关的状态,那么当我导航到另一个页面时(在我的应用程序中,我有标签可以执行此操作),不会显示该更改。
我看到“Traits”下有一个“链接”选项,但没有帮助。
如何确保所有标签中只有一个视图瞬间?
干杯!
答案 0 :(得分:0)
正如我在评论中所说,你不能用segues做这件事,因为他们总是创造新的实例。因此,我认为您必须将代码中的子控制器添加到需要它的每个控制器。在故事板中,您可以为每个需要嵌入式控制器的控制器添加子视图,该控制器充当占位符。为控制器提供一个自由形式的开关,并将其大小设置为与添加到其他控制器的子视图相同的大小,并取消选中"从NIB"调整视图大小的框。这是一个示例故事板,
在代码中,您需要在viewDidAppear中添加控制器,并在viewDidDisappear中将其删除(因此可以将其添加到下一个控制器 - 它不能同时位于两个位置)。在控制器中,您将使用交换机创建控制器的实例,并且在所有其他控制器中,您将获得对该实例的引用。所以,在第一个控制器中,
- (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];
}