将容器置于视图前面

Bring Container to Front of View

我有三个控制器。一个如果 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!!!!

}

我不得不想象容器位于页面的最前端。但是,当我 运行 应用程序时,容器内的按钮不可点击。

下面的故事板。

正在调试视图屏幕截图。

这有什么问题吗?有没有更好的方法来处理这个问题。当用户翻阅页面但容器与 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

我猜问题出在包含您的页面视图控制器的视图中。 您正在将页面视图控制器的视图添加为视图控制器视图的子视图,然后将一些 headerBar 放在前面。它与页面视图控制器的视图重叠。

致电

self.headerBar.addSubview(pageViewController!.view)

而不是

self.view.addSubview(pageViewController!.view)

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