【问题标题】:Swift - Implementing PageViewController in one UIViewControllerSwift - 在一个 UIViewController 中实现 PageViewController
【发布时间】:2014-11-30 14:27:36
【问题描述】:

互联网上没有任何地方解释如何在你的 UIViewController 中实现 PageViewController 我从默认的 XCode 基于页面的应用程序中获取此代码

class ViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
    var pageViewController: UIPageViewController?
    override func viewDidLoad() {
        self.pageViewController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation: .Horizontal, options: nil)
        self.pageViewController!.delegate = self
        self.view.addSubview(self.pageViewController!.view)
        // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
        var pageViewRect = self.view.bounds
        self.pageViewController!.view.frame = pageViewRect
        self.pageViewController!.didMoveToParentViewController(self)
        // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
        self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
     //?? what controller should I return
    }
    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    //?? what controller should I return
    }
}

我想要 6 页,我想在不同的页面中添加文本如何识别我在哪个页面并显示我想要的信息?我只想使用 1 个 ViewControler,只有这个视图控制器。

【问题讨论】:

    标签: ios swift uiviewcontroller uipageviewcontroller


    【解决方案1】:

    UIPageViewController 要求您使用不同的视图控制器。您可能需要重构代码以拥有“父”或“根”视图控制器,其唯一工作是呈现其他实现特定页面逻辑的视图控制器。这是一些示例代码。它过于简单,但应该让您了解如何开始。

    class PageContent {
        let text: String
        let index: Int
        init(text: String, index: Int) {
            self.text = text
            self.index = index
        }
    }
    
    class MyPageViewController : UIViewController {
        var page: PageContent!
        override func viewDidLoad() {
            // Load page data for self.page
        }
    }
    
    class ViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
        var pageViewController: UIPageViewController?
        var pages: [PageContent]!
    
        override func viewDidLoad() {
            let firstPage = PageContent(text: "...", index: 0)
            let secondPage = PageContent(text: "...", index: 1)
            // ...
            self.pages = [firstPage, secondPage] // add more as necessary
        }
    
        func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
            let beforeController = viewController as MyPageViewController
            let newPageIndex = beforeController.page.index - 1
            if newPageIndex >= 0 {
                let newController = MyPageViewController()
                newController.page = self.pages[newPageIndex]
                return newController
            } else {
                return nil
            }
        }
    
        func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
            let afterController = viewController as MyPageViewController
            let newPageIndex = afterController.page.index + 1
            if newPageIndex < self.pages.count {
                let newController = MyPageViewController()
                newController.page = self.pages[newPageIndex]
                return newController
            } else {
                return nil
            }
        }
    }
    

    【讨论】:

    • newController.page = viewController.page - 1newController.page = viewController.page + 1 输出错误...在 MyPageViewController 中如何为 viewdidload 中的页面添加信息? if(page==1){...}else if(page==2){...}... ?
    • 你能链接到错误的截图吗?还是错误文本?
    • 啊,抱歉,忘记投射视图控制器了。代码 sn-p 已更新。
    • 我必须在哪个类中添加我发布的 viewDidLoad 中的方法,才能在视图中开始滑动页面?
    • 不确定,这取决于。两者都试试。
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多