将容器带到视图前面

时间:2015-06-26 01:40:06

标签: ios swift uipageviewcontroller

我有三个控制器。一个HomeViewController启动BlahPageViewController及其各个页面。其他两个控制器(BlahPageViewControllerBlahItemViewController专门处理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!!!!

}

我必须想象容器会走到页面的最前端。但是,当我运行应用程序时,容器内的按钮不可单击。

下面的故事板。

enter image description here

调试视图截图。

enter image description here

这有什么问题?有没有更好的方法来处理这个问题。当用户翻阅页面但容器与BlahItemViewController重叠时,我不希望这些按钮移动?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我想问题是包含您的页面视图控制器。 您正在添加页面视图控制器的视图作为视图控制器视图的子视图,然后将一些headerBar添加到前面。它重叠了页面视图控制器的视图。

致电

self.headerBar.addSubview(pageViewController!.view)

而不是

self.view.addSubview(pageViewController!.view)

答案 2 :(得分:0)

我认为您的视图堆栈是正确的。你能检查一下容器的userInteractionEnabled是否为真。或者在不添加childviewcontroller的情况下检查按钮是否可点击。所以你可以看看childviewcontroller是否正在影响按钮'的行为。