【问题标题】:Displaying a UIViewController within another UIViewController在另一个 UIViewController 中显示一个 UIViewController
【发布时间】:2014-08-29 11:23:28
【问题描述】:

我正在开发一个应用程序,其中 UIViewController (firstViewController) 包含一些 UILabelsUIButtonUIView (子视图)。 UIView 应该显示包含一些层的 UIViewController (secondViewController)。我无法做到这一点。

我应该怎么做才能在 firstViewControllersubView 中显示 secondViewController em>?

【问题讨论】:

  • 将第二个视图控制器作为 childViewController 添加到第一个 viewController 并将第二个视图控制器的视图添加为子视图。

标签: ios objective-c uiview uiviewcontroller subview


【解决方案1】:

您应该使用 UIViewController 包含或父/子视图控制器。你可以阅读详情here

最基本的版本是:

UIViewController *parentVC = ...
UIViewController *otherVC = ... // it's view will be added as subview

[parentVC addChildViewController:otherVC];
[parentVC.containerView addSubview:otherVC.view]; // containerView is a view where your child view controller should go
[otherVC didMoveToParentViewController:parentVC];

如果只添加其他视图控制器的视图作为子视图,子视图控制器将不会接收所有事件。例如,如果您使用此处建议的其他方法(仅将视图添加为子视图,仅此而已),您将不会收到 -viewDidAppear: 消息(和其他消息)发送到您的子视图控制器。

【讨论】:

    【解决方案2】:

    您可以通过在下面的视图中添加另一个视图控制器的视图作为子视图来做到这一点

    SecondVC *aObjSecondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondVC"];
    [self.view addSubview:aObjSecondVC.view]
    

    【讨论】:

      【解决方案3】:

      您可以使用以下行添加它:

      [self.subView addSubView:secondViewController.view];
      

      【讨论】:

      • 请注意,如果您这样做,您将不会收到 viewWillAppear:viewDidAppear: 事件。 UIViewController 不是设计为像这样添加的。我强烈建议不要使用这种方法。看看 MANIAK_dobrii 的答案,我认为它以正确的方式处理了这个问题。
      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多