【问题标题】:Can I create a UIContainerView programmatically?我可以以编程方式创建 UIContainerView 吗?
【发布时间】:2015-06-24 00:50:11
【问题描述】:

我正在尝试创建一个使用UIContainerViews 来托管UIViewControllers 的动态视图流。 UIContainerViews(或UIViewControllers)需要以编程方式添加到UIView,以允许多个并排。

我一直在四处寻找,但找不到任何可用于创建 UIContainerView 的构造函数。

有没有一种简单的方法可以做到这一点,还是违反了创建可重用视图的常规准则?

总结一下,我想达到这样的效果:

var containerView = UIContainerView()
containerView.add(myViewController)

【问题讨论】:

  • 您可以将其他 ViewController 的视图添加到您的“ContainerView”并以编程方式控制视图。
  • @JacobsonTalom 我考虑过这一点,但我想知道是否会有任何退步。例如,如果我在“添加”后对 UIViewController 执行了任何操作,如果 UIViewControllers 本身并未实际添加到视图中,这不会导致一些不一致或问题吗?
  • 好吧,就像 Simon McLoughlin 在他的回答中所说:您还应该将 ViewControllers 添加为子项等(请参阅他的回答)。如果你想要一个快速的例子,我可以为你发布一个例子。
  • 不需要,我可以转换 Obj-C 代码:)。但是,您可以将其发布为帮助他人的答案,这总是值得赞赏的。

标签: ios swift uicontainerview


【解决方案1】:

UIContainerView 只是一种将 viewController 添加为另一个 viewController 的子级并设置其边界的视觉方式。

您可以通过将第二个 viewController 添加为第一个 viewController 的子级来以编程方式执行此操作,获取第二个视图并将其放置在第一个视图的某个位置。

类似的东西;

childVC = [[SomeViewController alloc] init];

[self addChildViewController:childVC];

[self.view addSubview:childVC.view];

[childVC didMoveToParentViewController:self];

【讨论】:

  • 如果对 childViewController 引用执行任何操作,它会正确处理它们吗?例如,一个 presentViewController 方法,尽管它实际上不是 UI 的一部分,因为只添加了 .view 属性?
  • @Chackle 所有交互都将由SomeViewController 内部的逻辑处理。它的功能就像两个 viewController 同时在屏幕上一样,彼此独立。如果用户在 parent 上滚动 scrollView,则会通知 parent,如果用户在 child 上滚动 scrollView,则会通知 childVC。唯一的区别是父级必须管理 childVC 的生命周期
  • 感谢您的解释。很有帮助!
猜你喜欢
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多