如何实现SegmentedControlValueChange来控制容器视图
我的问题是追踪别人的问题 。 在@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之间:
- 什么代码在“父控制器”的H和M文件?
- 什么代码在“父控制器”的H和M文件?
最后,我采取了一个不同的方法来解决我在问题中提到的问题,因为我觉得使用故事板标识符有点“丑陋”,并且不正确,因为视图中没有任何细节。
所以这就是我所做的:
我开始通过创build用于将在容器视图中显示的视图控制器的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; }
最后,我select了不同的分段控制值时处理事件。
- (IBAction)segmentedControlValueChanged:(UISegmentedControl *)sender { // Hide current view controller [self hideContentController:self.currentController]; // Show new selected view controller [self displayContentController:[self.controllers objectAtIndex:sender.selectedSegmentIndex]]; }
希望这可以帮助。