我的问题是对someone else's question的跟进。在@ritch提出的问题的图像中,他有以下视图控制器
"View Controller" -> (Container View)"View Controller" ->["First Controller", "Second Controller"]
对于我的问题,我会将其重写为
"Parent Controller" -> (Container View)"Child Controller" ->["First Controller", "Second Controller"]
所以我试图实现方法
- (IBAction)SegmentedControlValueChange:(UISegmentedControl *)sender
{
}
逻辑上我认为这个方法应该在“父控制器”中,而作为参考,在“子控制器”中我应该有displayContentController
和
FirstController *firstController = [self.storyboard instantiateViewControllerWithIdentifier:@"yourIdentifier"];
有人请为我澄清:SegmentedControlValueChange和instantiateViewControllerWithIdentifier:
答案 0 :(得分:0)
最后,我对我在问题中所说的内容采取了不同的方法,因为我觉得使用故事板标识符有点难以理解'并且不正确,因为视图没有任何段落。
以下是我的所作所为:
我开始为将要在容器视图中显示的视图控制器创建带有XIB文件的类。 (例如FirstController,SecondController等..)
然后我把它放在我的ViewController的ViewDidLoad方法中(父视图控制器 - 具有分段控件的那个)
- (void)viewDidLoad
{
[super viewDidLoad];
// First Controller
self.firstViewController = [[FirstViewController alloc] init];
// Second Controller
self.secondViewController = [[SecondViewController alloc] init];
// Add the controllers to an Array
self.controllers = @[self.firstViewController, self.secondViewController];
// Set the container to show the first view controller on load
[self displayContentController:[self.controllers firstObject]];
}
然后我设置了三种方法来处理容器视图的视图显示和隐藏
- (void)displayContentController:(UIViewController *)content
{
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];
// Set current controller
self.currentController = content;
}
- (void)hideContentController: (UIViewController*)content
{
[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];
}
- (CGRect)frameForContentController
{
return self.contentController.frame;
}
最后,当选择了不同的分段控制值时,我处理了事件。
- (IBAction)segmentedControlValueChanged:(UISegmentedControl *)sender
{
// Hide current view controller
[self hideContentController:self.currentController];
// Show new selected view controller
[self displayContentController:[self.controllers objectAtIndex:sender.selectedSegmentIndex]];
}
希望这有帮助。