如何实现SegmentedControlValueChange来控制Container View

时间:2014-07-23 15:36:53

标签: ios objective-c xcode uiviewcontroller uicontainerview

我的问题是对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:

  • “父控制器”的h和m文件中包含哪些代码?
  • “父控制器”的h和m文件中包含哪些代码?

1 个答案:

答案 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]];
}

希望这有帮助。