页面视图控制器内容不显示其小部件

时间:2015-11-29 13:19:03

标签: ios swift

页面视图控制器未显示其内容视图控制器, 请任何人都可以帮助解决错误并帮助解决方案 感谢

import UIKit
class ViewController: UIViewController, UIPageViewControllerDataSource {

var pageViewController: UIPageViewController!
var hymnTitles: [String]!
var hymnContents: [String]!
let hymn1 = "this is my story , this is my song"
let hymn2 = "Amazing grace how sweet thou art"
let hymn3 = "God moves in a mysterious way"

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.hymnTitles = ["Hymn 1", "Hymn 2", "Hymn 3"]
    self.hymnContents = [hymn1, hymn2, hymn3]

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self

    let startVC = self.viewControllerAtIndex(0) as ContentViewController
    let viewControllers = NSArray(object: startVC)

    self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)

    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.height - 60)
    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)
}



func viewControllerAtIndex(index: Int) -> ContentViewController
{
    if ((self.hymnTitles.count == 0) || (index >= self.hymnTitles.count)) {
        return ContentViewController()
    }

    let vc: ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController

    vc.hymnContent = self.hymnContents[index]
    vc.titleText = self.hymnTitles[index] 
    vc.pageIndex = index

    return vc


}


// MARK: - Page View Controller Data Source

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{

    let vc = viewController as! ContentViewController
    var index = vc.pageIndex as Int


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

    }

    index--
    return self.viewControllerAtIndex(index)

}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    let vc = viewController as! ContentViewController
    var index = vc.pageIndex as Int

    if (index == NSNotFound)
    {
        return nil
    }

    index++

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

    return self.viewControllerAtIndex(index)

}

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

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

}

} 页面视图控制器未显示其内容视图控制器, 请任何人都可以帮助解决错误并帮助解决方案 感谢

1 个答案:

答案 0 :(得分:0)

您需要添加页面视图控制器的所有必需功能。 尝试添加以下代码:

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{
    var index = (viewController as! ContentViewController).pageIndex
    if (index == 0) || (index == NSNotFound) {
        return nil
    }
    index--
    return viewControllerAtIndex(index)
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
{
    var index = (viewController as! ContentViewController).pageIndex
    if index == NSNotFound {
        return nil
    }
    index++
    if (index == self.pageTitles.count) {
        return nil
    }
    return viewControllerAtIndex(index)
}

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

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