【问题标题】:Container View Controller Examples [closed]容器视图控制器示例 [关闭]
【发布时间】:2011-12-07 00:24:08
【问题描述】:

任何人都可以指出任何将自定义视图控制器创建为容器视图控制器的好例子吗?我能找到的唯一文档是UIViewController Class Reference 中的几段。我觉得我需要比这更多的信息,示例实现会很好。 Google 一无所获。

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

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

【问题讨论】:

  • 除了提到的一个 hypercrypt 之外,您是否找到了其他来源?
  • 还没有。如果我有时间,我将在今天晚些时候再进行一次挖掘。考虑到它的重要性和有用性,关于它的信息如此之少似乎很奇怪。我想知道它是否有问题,并且在改进后会更好地记录。
  • 这让我非常困惑。例如,视图只能有一个嵌入式控制器。如果你想在那个容器视图上切换控制器呢?
  • @JanakNirmal 非常感谢。
  • 我可以隐藏容器视图吗

标签: objective-c ios uiviewcontroller ios5


【解决方案1】:

到目前为止,我发现的最好的东西是 WWDC 2011 会议视频Session 102 - Implementing UIViewController Containment。

【讨论】:

  • 同上。这不是我最喜欢的演示代码示例,但它确实正确地实现了 VC 容器以及内存管理——当您的子视图控制器不再可见时释放它们非常重要。
  • 不幸的是,关于如何使用 ContainerViewController 的演示没有工作,因为他的 iPad 上没有电子邮件设置 :-(
  • 该会话是否有代码示例?
  • 你现在有示例代码吗,我需要它,因为我已经尝试了很多但还没有解决方案。
【解决方案2】:

【讨论】:

  • +1 提到从哪里获得该死的代码包。我一直在看。
  • 再次+1,为什么苹果不能将 WWDC 会话代码放在他们的会员页面上?
  • +1, 介意分享一下,这个源码路径怎么获取?
  • @JanakNirmal 您在获取哪个源代码时遇到问题?要获取 WWDC 代码,只需点击 dmg 链接并使用您的 Apple 开发人员 ID 登录。
【解决方案3】:
- (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];
}

【讨论】:

  • 这是一个很好的例子。但是这种情况下的内存管理可以改进:stackoverflow.com/a/8453677/849616 以获得更合适的解决方案。
  • 不是你错了。但是 [self addChildViewController:vc1];没有意义。容器 VC 可能有几个容器视图控制器。
  • @Vive 我在我的项目中达到了一个我关心内存管理的地步。你能告诉我你发布的链接在内存管理方面做得更好吗?我是新手,很难看到差异
【解决方案4】:

【讨论】:

    【解决方案5】:

    【讨论】:

    • 其实我早就发现了,可惜写的是ios4,但是5做了很大的改动。 Apple 现在明确支持创建自定义视图控制器容器,尽管它们似乎不想帮助我们弄清楚如何使用它们。不过还是谢谢。
    • 你能告诉我他们在哪里这么说吗?不是怀疑你,只是好奇,因为我也一直在为此苦苦挣扎。
    • 不用担心。我查看了他的容器类的代码,它们都没有使用以下任何方法:addChildViewController:、removeFromParentViewController、transitionFromViewController:toViewController:duration:options:animations:completion:、willMoveToParentViewController:和didMoveToParentViewController:这些都在更新中提到UIViewController 的 ios5 文档。
    【解决方案6】:

    不知道这是不是一个“好”的例子,但是你可以从https://bitbucket.org/javieralonso/jaacordeonviewcontroller/overview获得一个免费的Container ViewController

    这是一个完整的手风琴隐喻容器视图控制器

    【讨论】:

    • 不错的发现。看起来很有用。
    【解决方案7】:

    这些是我最喜欢的(iOS7 就绪)教程/示例(所有三个都在 github 上提供了源代码):

    View Controller Containment

    Custom Container View Controller Transitions

    Interactive Custom Container View Controller Transitions

    然后,当然,Apple 提供了关于这个主题的完整文章,我认为这是非常宝贵的:

    Creating Custom Container View Controllers

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多