ios - UIPageViewController 实现 - 更改 View Controller 后黑屏

标签 ios swift uiviewcontroller uipageviewcontroller

尝试成功实现允许用户使用 UIPageViewController 在 UIViewControllers 之间滚动的应用程序。

目前,在滑动到第二个 UIViewController 后,屏幕变黑,我无法再滚动了。有什么想法吗?

这是我的子类 UIPageViewController 代码:

class ApplicationViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var registrationController : UIViewController!
var loginController : UIViewController!
var captureController : UIViewController!
var visibleVCS = [UIViewController]()
var index = 0

override func viewDidLoad() {
    super.viewDidLoad()
    initControllers()
    reset()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func initControllers()
{
    registrationController = self.storyboard?.instantiateViewControllerWithIdentifier("RegistrationViewController") as UIViewController
    loginController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as UIViewController
    captureController = self.storyboard?.instantiateViewControllerWithIdentifier("CaptureViewController") as UIViewController

    visibleVCS = [registrationController, loginController, captureController]
}

func reset() {
    var currentController = viewControllerAtIndex(index)
    pageViewController.dataSource = self
self.setViewControllers([currentController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    if(index >= visibleVCS.count - 1){
        return nil
    }
    return self.viewControllerAtIndex(++index)
}

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

    if(index <= 0){
        return nil
    }
    return self.viewControllerAtIndex(--index)

}

func viewControllerAtIndex(index : Int) -> UIViewController? {
    return visibleVCS[index];
}
}

最佳答案

将索引保存为 UIPageViewController 中的属性对我来说也不起作用。为了解决这个问题,我必须创建一个具有索引属性的基本 UIViewController,如下所示:

class PageItemController: UIViewController {

var index = -1

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

然后让你的所有页面成为 PageItemController 的子类,并根据它们在数组中的位置设置它们的索引

func initControllers(){
    registrationController = self.storyboard?.instantiateViewControllerWithIdentifier("RegistrationViewController") as PageItemController
    registrationController.index = 0
    loginController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as PageItemController
    loginController.index = 1
    captureController = self.storyboard?.instantiateViewControllerWithIdentifier("CaptureViewController") as PageItemController
    captureController.index = 2
    // visibleVCS type must be [PageItemCotroller]
    visibleVCS = [registrationController, loginController, captureController]
}

最后根据currentController索引实现before和after方法

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

    let itemController = viewController as! PageItemController

    if itemController.index > 0 {

        return visibleVCS[itemController.index - 1]

    }

    return nil

}


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

    let itemController = viewController as! PageItemController

    if itemController.index < visibleVCS.count - 1 {


        return visibleVCS[itemController.index + 1]
    }

    return nil
}

关于ios - UIPageViewController 实现 - 更改 View Controller 后黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30229654/

相关文章:

iphone - self.navigationController pushViewController 不工作

ios - 在 iOS 上填充 SQLite FTS 表时遇到问题

json - 如何使用swift在字典中添加多个参数[String,Dictionary]?

ios - 我如何结合两个或多个 CIImage

ios - 确定 viewWillAppear 是来自打开应用程序还是取消选择模态

swift - 访问另一个 View Controller 中的变量 - Xcode 8.0 Swift 3.0

iphone - 如何检测 UIImageview 的动画方向?

ios - 如何在 Apple Watch 中为按钮设置标签

ios - 根据方向更新自动布局约束

iphone - 查看旋转通知 : why didRotateFromInterfaceOrientation: doesn't get called?