我有三个控制器.一个如果HomeViewController启动BlahPageViewController和它的单个页面.另外两个控制器(BlahPageViewController和BlahItemViewController专门处理UIPageViewController.在我的HomeViewController中,我有以下代码初始化页面.
private func setPageViewController() { let blahPageController = self.storyboard!.instantiateViewControllerWithIdentifier("BlahPageController") as! BlahPageViewController blahPageController.dataSource = self blahPageController.blahs = blahs if blahs.count > 0 { let firstController = getItemController(0)! let startingViewControllers: NSArray = [firstController] blahPageController.setViewControllers(startingViewControllers as [AnyObject],direction: .Forward,animated: false,completion: nil) } // Setting page view controller to front of app pageViewController = blahPageController addChildViewController(pageViewController!) self.view.addSubview(pageViewController!.view) pageViewController!.didMoveToParentViewController(self) // Now lets bring that container to the front. self.view.bringSubviewToFront(self.headerBar) // BUT IT DOESN'T WORK!!!! }
我必须想象容器会走到页面的最前端.但是,当我运行应用程序时,容器内的按钮不可单击.
下面的故事板.
调试视图截图.
这有什么问题?有没有更好的方法来处理这个问题.当用户翻阅页面但容器与BlahItemViewController重叠时,我不希望这些按钮移动?我怎样才能解决这个问题?
解决方法
在你的setPageViewController()函数中,你正在使用addSubview()将UIPageViewController的视图添加到ViewController的视图中.这将使视图位于所有其他视图之上.
基本上你有两个选择来避免这种情况.将其作为第一个视图插入使用
self.view.insertSubview(pageViewController!.view,atIndex: 0)
或使用以下特定视图
self.view.insertSubview(pageViewController!.view,belowSubview: self.headerbar)
这应该够了吧.
更新
还要确保为容器视图启用了用户交互. Interface Builder中有一个设置,但您也可以在代码中执行此操作:
self.headerbar.userInteractionEnabled = true