我正在尝试在Swift应用程序中利用UIPageViewController
,其中包含多个视图控制器。 我的故事板上有两个视图控制器(firstViewController
和secondViewController
),它们都嵌入了自己的导航控制器。 它们具有故事板标识符“FirstViewController
”和“SecondViewController
”。 我的故事板上还有一个页面视图控制器,带有identifierPageView
控制器,并将导航设置为水平,转换样式设置为滚动。 FirstViewController
是应用程序的根视图控制器。
我希望firstViewController
成为页面视图控制器的第一页,因此我编写了以下代码:
import Foundation
import UIKit
class FirsttViewController: UITableViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
override func viewDidLoad() {
let pageViewController: PageViewController = self.storyboard.instantiateViewControllerWithIdentifier("PageViewController") as PageViewController
pageViewController.delegate = self
var viewControllers: [UIViewController] = [self]
pageViewController.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
self.addChildViewController(pageViewController)
self.view.addSubview(pageViewController.view)
pageViewController.didMoveToParentViewController(self)
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! {
let secondViewController: SecondViewController = self.storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
return secondViewController
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {
return nil
}
func presentationCountForPageViewController(pageViewController: UIPageViewController!) -> Int {
return 2
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController!) -> Int {
return 0
}
}
SecondViewController
的文件看起来像这样:
import Foundation
import UIKit
class SecondViewController: UITableViewController, UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController!, viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! {
return nil
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {
let firstViewController: FirstViewController = self.storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as FirstViewController
return firstViewController
}
}
然而,当我运行我的应用程序时,似乎没有页面视图控制器。它只显示firstViewController
,没有标点、页码等功能。有人知道是什么问题吗?我找到了一些Objective-C教程,但它们都涵盖了使用一个视图控制器来处理所有页面,并且有一个不在pageView
中的根视图控制器,所以它们没有太大的帮助。我曾希望它会像使用tabBarController
那样,你只需点击并拖动到视图控制器,但可惜这并不是这种情况。就像我说的,我以前没有使用过其中任何一个,所以我有点迷失。
更新:
按照iiFreeman的建议,我对UIPageViewController
进行了子类化,并将其作为我的storyboard文件中的根。以下是该子类:
import Foundation
import UIKit
class PageViewController: UIPageViewController {
override func viewDidLoad() {
let startingViewController = self.storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as FirstViewController
self.dataSource = startingViewController
var viewControllers: [UIViewController] = [startingViewController]
self.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
}
然而,现在该应用程序只停留在黑屏上,并最终使 Xcode 与模拟器失去连接。我不太确定出了什么问题。