是否可以将表视图控制器添加到视图控制器的一部分?

时间:2019-03-20 21:06:40

标签: ios uiviewcontroller uinavigationcontroller

让我们说我有一个 UITableViewController ,它大部分是可重用的,应该在许多 UIViewController 中使用,但是它应该只覆盖整个视图的一部分(例如总高度的90%)。通常,我会在导航中执行此操作,但是如果我想保持UIViewController的前10%可见,并显示剩余90%的 UITableViewController ,则可能,如果可以的话,该怎么做?

2 个答案:

答案 0 :(得分:0)

是的,可以。只需将UITableViewController作为子控制器添加到您的父UIViewController。

此外,您可以在这里Apple Documentation

进行阅读。

答案 1 :(得分:0)

是的。大视图控制器是容器视图控制器,而小视图控制器(在这种情况下为表视图控制器)是子视图控制器。我们可以在容器视图控制器中添加或删除子视图控制器。

将子视图控制器添加到容器

- (void)displayContentController:(UIViewController *)content {
   [self addChildViewController:content];
   content.view.frame = [self frameForContentController];
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];
}

从容器中删除子视图控制器

- (void)hideContentController:(UIViewController *)content {
   [content willMoveToParentViewController:nil];
   [content.view removeFromSuperview];
   [content removeFromParentViewController];
}

我们还可以删除旧的子视图控制器,并同时添加新的子视图控制器。这是示例代码(带有动画)。

- (void)cycleFromViewController:(UIViewController *)oldVC
               toViewController:(UIViewController *)newVC {
   // Prepare the two view controllers for the change.
   [oldVC willMoveToParentViewController:nil];
   [self addChildViewController:newVC];

   // Get the start frame of the new view controller and the end frame
   // for the old view controller. Both rectangles are offscreen.
   newVC.view.frame = [self newViewStartFrame];
   CGRect endFrame = [self oldViewEndFrame];

   // Queue up the transition animation.
   [self transitionFromViewController:oldVC toViewController:newVC
        duration:0.25 options:0
        animations:^{
            // Animate the views to their final positions.
            newVC.view.frame = oldVC.view.frame;
            oldVC.view.frame = endFrame;
        }
        completion:^(BOOL finished) {
           // Remove the old view controller and send the final
           // notification to the new view controller.
           [oldVC removeFromParentViewController];
           [newVC didMoveToParentViewController:self];
        }];
}