在UIPageController的当前页面呈现子视图控制器

问题描述:

我有一个页面视图控制器,它使用普通的UIPageViewController方法在视图控制器之间转换。里面呈现视图控制器(假设当前视图控制器)中的一个,我添加子视图控制器到一个名为containerView像这样子视图:在UIPageController的当前页面呈现子视图控制器

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不会运行)。当视图控制器正常显示时(使用正常继续的全屏幕),此行为正常工作。

任何想法?

+0

它非常奇怪......所以在调试时,slider-changed的委托方法不会被调用? –

+0

实际上它会被触发,但是标签不会更新。我在滑块IBAction中放置了一个断点,它会被调用,但是标签的文本不会改变'label.text = String(slider.value)',就好像当视图控制器正常显示时一样,我甚至试图改变'self.view'的背景色,并且工作正常看看是否有效 –

+0

你需要在_much_ more p中描述情况p为了得到一个很好的答案,请重新调整细节。否则,你只是在浪费你刚刚花在赏金上的代表。很难说出什么问题。但是,请注意多个视图控制器级别之间的通信(在父视图控制器中的视图控制器中查看)是一个非常棘手的问题!我在这里有一个很长的讨论可能会给你一些想法的选项:http://*.com/a/33458977/341994 – matt

好像故事板视图控制器正在发生什么事情,因为我可以删除滑块并添加新的滑块,并且该功能在UIPageViewController页面内正常工作。

也许是因为你没有为子子视图设置约束。 当容器视图大小发生变化时 - 您的子视图超出范围。 您可以查看其是否在Xcode查看调试功能(当你的应用程序在屏幕上的问题,你可以捕捉所有视图(菜单调试 - >查看debugging->捕获视图层次),调查发生了什么

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)