繁体   English   中英

IOS中的容器视图

[英]Container views in IOS

我想使用容器视图来启动另一个视图控制器,但是看不到任何有关如何以编程方式分配它的信息。 我可以从用户界面执行此操作,但是如果我想使用coes创建一个,并将其链接到UIviewController,该怎么办? 它的行为就像普通的UIview吗?

如果我遵循您的问题,您正在询问如何在代码中使用视图控制器包含。 我建议您查看一下《 View Controller编程指南》中的“ 创建自定义容器View Controllers”部分,该部分向您显示了执行此操作的代码,包括添加子视图控制器:

[self addChildViewController:content];                 // 1
content.view.frame = [self frameForContentController]; // 2
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];          // 3

当使用子视图控制器(至少不占据整个屏幕的控制器)时,在父视图控制器的视图上设置一个UIView很有用,它决定了子视图控制器的边界。 它极大地简化了许多任务。 在上面的代码片段中,他们假设子视图称为frameForContentController

或删除一个(在此代码段中, contentUIViewController * ,它引用要删除的子控制器):

[content willMoveToParentViewController:nil];  // 1
[content.view removeFromSuperview];            // 2
[content removeFromParentViewController];      // 3

如果要用另一个子控制器替换一个子控制器:

- (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];
            }];
}

我还建议您查看WWDC 2011-实现UIViewController Containment

只需使用父VC拥有的普通UIView。 创建一个子VC,并在addChildViewController:的帮助下将其添加到父VC,然后将子VC的视图作为子视图添加到容器视图addSubview:在VC的viewDidLoad方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM