容器视图控制器示例[关闭]


94

谁能指出我将自定义视图控制器创建为容器视图控制器的任何好例子?我可以找到的唯一文档是《UIViewController类参考》中的几段。我觉得我需要的比这更多的信息,并且示例实现会很好。谷歌什么也没发现。

我对这种方法特别感兴趣:

transitionFromViewController:toViewController:duration:options:animations:completion:

除了提到的一种超级加密算法,您还找到了其他来源吗?
约翰·埃斯特罗皮亚

1
还没。如果有时间,我今天晚些时候再进行挖掘。鉴于它的重要性和实用性,关于它的信息很少,这似乎很奇怪。我想知道它是否有错误,并且在改进后会得到更好的记录。
2011年

3
这让我非常困惑。例如,视图只能有一个嵌入式控制器。如果要在该容器视图上切换控制器怎么办?
user4951 '10 -10-10

@JanakNirmal非常有义务。
分心

我可以隐藏容器视图

Answers:


51

到目前为止,我发现最好的东西是WWDC 2011会议视频会议102-实现UIViewController包含


1
同上。这不是我最喜欢的演示代码示例,但是它可以正确实现VC容器以及内存管理-在子视图控制器不再可见时释放它们非常重要。
记忆

1
不幸的是,关于如何使用ContainerViewController的演示无法正常工作,因为他没有在iPad上设置电子邮件:-(
Ken M. Haggerty

该会话是否有代码示例?
user4951 '10 / 10/15

您现在有示例代码了吗,我需要它,因为我已经尝试了很多,但还没有解决方法。
iPhone以编程方式

37

除了已经提到的hypercrypt 的WWDC会话视频会话 102- 实现UIViewController包含之外,有关“ iOS上的视图控制器的演变”的Apple WWDC 2012会话也涵盖了该主题,并且示例代码是示例代码包的一部分:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

这里还有一个例子:https : //github.com/toolmanGitHub/stackedViewControllers


2
+1提到从哪里获得该死的代码包。我一直在浏览它。
user4951 '10 -10-15

6
再次+1,为什么o苹果为什么不能将WWDC会话代码放在其成员页面上?
axello

+1,您可以共享吗,如何获取此源代码路径?
Janak Nirmal

1
@JanakNirmal您难以获取哪个源代码?要获取WWDC代码,只需遵循dmg链接并使用您的Apple开发人员ID登录。
JosephH

17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

此IBAction触发两个VC之间的转换:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}

1
这是一个很好的例子。但是在这种情况下,可以改进内存管理:stackoverflow.com/a/8453677/849616提供了更合适的解决方案。
Vive 2012年

1
并不是说你错了。但是[self addChildViewController:vc1]; 没有道理。容器VC可能具有多个Container View Controller。
user4951 '10 -10-10

@Vive在我的项目中,我对内存管理感到担忧。您能告诉我您发布的链接在内存管理方面有哪些特别好的表现?我很新,很难看到差异
jacobronniegeorge 2013年


10

4
其实我已经发现了,但是不幸的是它是关于Ios4的,但是5已经有了重大的改变。Apple现在明确支持创建自定义View Controller容器,尽管它们似乎不想帮助我们确定如何使用它们。不过谢谢
分心2011年

你能告诉我他们在哪里说。不怀疑您,只是好奇,因为我也一直在努力。
瑞佩雷斯

4
别担心。我浏览了他的容器类的代码,没有一个使用以下任何方法:addChildViewController :、 removeFromParentViewController,transitionFromViewController:toViewController:duration:options:animations:completion :、 willMoveToParentViewController和didMoveToParentViewController:在更新中都提到了ios5 UIViewController的文档。
2011年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.