将容器置于视图前面
Bring Container to Front of View
我有三个控制器。一个如果 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
我猜问题出在包含您的页面视图控制器的视图中。
您正在将页面视图控制器的视图添加为视图控制器视图的子视图,然后将一些 headerBar
放在前面。它与页面视图控制器的视图重叠。
致电
self.headerBar.addSubview(pageViewController!.view)
而不是
self.view.addSubview(pageViewController!.view)
我认为您的视图堆栈是正确的。您可以检查容器的 userInteractionEnabled 是否为真。或者在不添加 childviewcontroller 的情况下检查按钮是否可点击。所以你可以看看 childviewcontroller 是否影响了按钮的行为。
我有三个控制器。一个如果 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
我猜问题出在包含您的页面视图控制器的视图中。
您正在将页面视图控制器的视图添加为视图控制器视图的子视图,然后将一些 headerBar
放在前面。它与页面视图控制器的视图重叠。
致电
self.headerBar.addSubview(pageViewController!.view)
而不是
self.view.addSubview(pageViewController!.view)
我认为您的视图堆栈是正确的。您可以检查容器的 userInteractionEnabled 是否为真。或者在不添加 childviewcontroller 的情况下检查按钮是否可点击。所以你可以看看 childviewcontroller 是否影响了按钮的行为。