UIViewControllers 中的 UIViewController

Posted

技术标签:

【中文标题】UIViewControllers 中的 UIViewController【英文标题】:UIViewController within UIViewControllers 【发布时间】:2015-08-28 12:17:12 【问题描述】:

我有一个 UIViewController,里面有 UITabBar。我正在尝试模仿 UITabBarController。

我的问题是在选择标签aritem时,我如何设置或UIViewController?

我很困惑如何将 UIViewController 放在试图模仿 UITabBarController 的 UIViewController 中。

请不要让我使用 UITabBarController

【问题讨论】:

所以你不知道如何将视图放入视图中?制作包含 2 个子视图的容器视图,这样可以解决问题吗? ... 您可以使用 UIContainerView 来处理多个 viewController 之间的变化 【参考方案1】:

您可以使用子视图控制器将视图控制器嵌入到其他视图控制器中,只需从您的视图控制器中调用:

YourViewController *childViewController = [[YourViewController alloc] init];

UIView *containerView = //some view in your view hierarchy
childViewController.view.frame = containerView.bounds;

[self addChildViewController: childViewController];
[containerView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];

如果你想在子视图控制器之间分页,你可以使用 UIPageViewController 作为根子视图控制器,或者从apple documentation:借用这段代码

- (void) cycleFromViewController: (UIViewController*) oldC
        toViewController: (UIViewController*) newC 

[oldC willMoveToParentViewController:nil];                        // 1
[self addChildViewController:newC];

newC.view.frame = [self newViewStartFrame];                       // 2
CGRect endFrame = [self oldViewEndFrame];

[self transitionFromViewController: oldC toViewController: newC   // 3
      duration: 0.25 options:0
      animations:^
         newC.view.frame = oldC.view.frame;                       // 4
         oldC.view.frame = endFrame;
       
       completion:^(BOOL finished) 
         [oldC removeFromParentViewController];                   // 5
         [newC didMoveToParentViewController:self];
        ];

【讨论】:

谢谢。我正在使用'[containerView addSubview:childViewController.view];'改变观点,这是一种不好的做法吗?【参考方案2】:

(1)要详细学习,建议你通过:

创建自定义容器视图控制器 - https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW6

还有

WWDC 2011 会议视频 - Session 102 - Implementing UIViewController Containment.

(2) 快速学习,请转至:Using Multiple ViewControllers on a Single Screen in iOS

在 git 上的演示项目:multiple-viewcontrollers

【讨论】:

以上是关于UIViewControllers 中的 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 UIViewControllers?

UIPageViewController 中的相同 UIViewControllers

UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法

堆叠的 UIViewControllers 中的 UITextView 委托问题

UIScrollView 的 ContentView 中的 UIViewControllers?

iOs 中所有 uiviewcontrollers 中的操作栏