Swift - 将UIPageViewController控件带到前面

时间:2014-09-16 11:20:46

标签: swift xcode6 uipageviewcontroller

在填写完整个屏幕后,将点缀的UIPageControls带到前面我遇到了一些麻烦。

这是我目前的代码:

    import UIKit


class ViewController: UIViewController, UIPageViewControllerDataSource {

    //This outlet wasn't originally there. Added a UIPageControl as an attempt to solve my issue
    @IBOutlet var pageControl: UIPageControl!

    var pageViewController : UIPageViewController?
    var pageTitles : Array<String> = ["Orc", "Elven", "Undead"]
    var pageImages : Array<String> = ["Plain_Orc.png", "Plain_Elf.png", "Plain_Undead.png"]
    var currentIndex : Int = 0


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
        self.pageViewController!.dataSource = self

        let startingViewController: PageContentViewController = self.viewControllerAtIndex(0)!
        let viewControllers: NSArray = [startingViewController]
        self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil)
        self.pageViewController!.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + 37);
        self.addChildViewController(self.pageViewController!)
        //self.view.addSubview(self.pageViewController!.view)

        //replacing addSubview from insane-36
        self.view.insertSubview(pageViewController!.view, belowSubview: self.pageControl!)

        self.pageViewController!.didMoveToParentViewController(self)

        //Bring pagecontrols to front? (DOsESN'T WORK)
        //self.view.bringSubviewToFront(self.pageViewController!.view)

        //attempt to fix above code from insane-36
        view.bringSubviewToFront(self.pageControl!)
        view.sendSubviewToBack(self.pageViewController!.view)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
    {
        var index = (viewController as PageContentViewController).pageIndex

        if (index == 0) || (index == NSNotFound) {
            return nil
        }

        index--

        println("Decreasing Index: \(String(index))")

        return self.viewControllerAtIndex(index)
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
    {
        var index = (viewController as PageContentViewController).pageIndex

        if index == NSNotFound {
            return nil
        }

        index++

        println("Increasing Index: \(String(index))")

        if (index == self.pageTitles.count) {
            return nil
        }

        return self.viewControllerAtIndex(index)
    }

    func viewControllerAtIndex(index: Int) -> PageContentViewController?
    {
        if self.pageTitles.count == 0 || index >= self.pageTitles.count
        {
            return nil
        }

        // Create a new view controller and pass suitable data.
        let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as PageContentViewController
        pageContentViewController.imageFile = self.pageImages[index]
        pageContentViewController.titleText = self.pageTitles[index]
        pageContentViewController.pageIndex = index
        self.currentIndex = index

        return pageContentViewController
    }

    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int
    {
        return self.pageTitles.count
    }

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int
    {
        return 0
    }


}

我认为将pageViewController视图置于前面的行将解决我的问题,但它不起作用。希望有人能给我一个正确的方向:)

1 个答案:

答案 0 :(得分:5)

使用以下任一方法将 UIPageViewController 的视图发送到 UIPageControl 的背面,

  1. 而不是使用 addSubview:添加 UIPageViewController&#39> 查看,使用
  2.    view.insertSubview(pageViewController.view, belowSubview:self.pageControl)
    
    1. 使用 bringSubviewToFront:方法,
    2.    view.bringSubviewToFront(self.pageControl) // after you have added the UIPageViewController's view
      
      1. 使用 sendSubviewToBack:方法,
      2.     view.sendSubviewToBack(self.pageViewController.view)