【问题标题】:Presenting child view controller inside UIPageController's current page在 UIPageController 的当前页面中呈现子视图控制器
【发布时间】:2017-04-09 06:03:16
【问题描述】:

我有一个页面视图控制器,它使用普通的 UIPageViewController 方法在视图控制器之间进行转换。在其中一个呈现的视图控制器(假设是当前视图控制器)中,我将一个子视图控制器添加到一个名为 containerView 的子视图中,如下所示:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let child = storyboard.instantiateViewController(withIdentifier: "child")
    self.addChildViewController(child)
    child.view.frame = self.containerView.bounds
    self.containerView.addSubview(child.view)
    child.didMove(toParentViewController: self)

视图控制器显示在containerView 中,但它只是半交互式的。例如,假设子视图控制器有一个滑块,它使用滑块的值更新标签。滑动滑块时,滑块将在containerView 内视觉移动,但不会更新标签(连接到滑块的 IBAction 不会运行)。当视图控制器正常呈现时(使用正常 segueing 的全屏),此行为正常工作。

有什么想法吗?

【问题讨论】:

  • 这很奇怪...所以在调试中,您的滑块更改的委托方法没有被调用?
  • 实际上它确实被触发了,但是标签没有更新。我在滑块 IBAction 中放置了一个断点,它确实被调用了,但是标签的文本不会像视图控制器正常显示时那样更改 label.text = String(slider.value)。我什至尝试更改self.view 的背景颜色,并且可以正常工作,只是为了看看是否有效。
  • 您需要更多更准确地描述情况以获得好的答案。否则你只是在浪费你刚刚花在赏金上的代表。甚至很难说出问题所在。但是,请注意,多个视图控制器级别(父视图控制器中的视图控制器中的视图)之间的通信是一个非常棘手的问题!我在这里对选项进行了长时间讨论,可能会给您一些想法:stackoverflow.com/a/33458977/341994

标签: ios uipageviewcontroller childviewcontroller


【解决方案1】:

可能是因为您没有对子子视图设置约束。 当容器视图大小发生变化时 - 您的子视图超出范围。 您可以使用 Xcode 中的查看调试功能检查它(当您的应用程序处于问题屏幕时,您可以捕获所有视图(菜单调试->查看调试->捕获视图层次结构)并调查发生了什么

child.view.frame = self.containerView.bounds
self.containerView.addSubview(child.view)
// need to add constraint, because if container view resized, child view frame not changed
child.view.autoresizinkMask = [.flexibleHeight, .flexibleWidth]
child.view.translatesAutoresizingMaskIntoConstraints = true
child.didMove(toParentViewController: self)

【讨论】:

    【解决方案2】:

    似乎故事板视图控制器发生了一些事情,因为我能够删除滑块并添加一个新滑块,并且该功能在 UIPageViewController 页面内正常工作。

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2015-02-27
      • 2016-02-11
      • 2012-12-02
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      相关资源
      最近更新 更多