首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift: UIPageViewController动作

swift: UIPageViewController动作
EN

Stack Overflow用户
提问于 2018-07-22 20:52:46
回答 2查看 428关注 0票数 0

我有UIPageViewController和这段代码可以翻转我的页面:

代码语言:javascript
复制
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex > 0 {
            return getContentViewController(withIndex: contentVC.itemIndex - 1) 
        }

        return nil
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex + 1 < images.count {
            return getContentViewController(withIndex: contentVC.itemIndex + 1)
        }

        return nil
    } 

但我想按下按钮翻页。我应该在按钮动作中打电话给viewControllerBeforeviewControllerAfter?还是我应该写另一段代码?该怎么做呢?

更新

代码语言:javascript
复制
override func viewDidLoad() {
        super.viewDidLoad()

        createPageViewController()
        setupPageControll()

    }

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

    func createPageViewController() {
        let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
        pageController.dataSource = self
        pageController.delegate = self

        if images.count > 0{
            let firstController = getContentViewController(withIndex: 0)!
            let contentControllers = [firstController]

            pageController.setViewControllers(contentControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)

        }

        pageViewController = pageController

        self.addChildViewController(pageViewController!)
        self.view.insertSubview(pageViewController!.view, at: 0)
        pageViewController!.didMove(toParentViewController: self)

    }

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return images.count
    }

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

    func setupPageControll(){
        let apperance = UIPageControl.appearance()
        apperance.pageIndicatorTintColor = UIColor.gray
        apperance.currentPageIndicatorTintColor = UIColor.white
        apperance.backgroundColor = UIColor.clear
    }

    func currentControllerIndex() -> Int{
        let pageItemController = self.currentConroller()

        if let controller = pageItemController as? ContentViewController {
            return controller.itemIndex
        }
        return -1
    }

    func currentConroller() -> UIViewController?{
        if (self.pageViewController?.viewControllers?.count)! > 0{
            return self.pageViewController?.viewControllers![0]
        }

        return nil
    }

    func getContentViewController(withIndex index: Int) -> ContentViewController? {
        if index < images.count{
            let contentVC = self.storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController
            contentVC.itemIndex = index
            contentVC.imageName = images[index]

            return contentVC
        }

        return nil
    }

}

extension PageViewController: UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
        pendingIndex = (pendingViewControllers.first as! ContentViewController).itemIndex
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        if completed {
            let currentIndex = pendingIndex
            if let index = currentIndex {
                self.PageControl.currentPage = index
            }

        }
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex > 0 {
            return getContentViewController(withIndex: contentVC.itemIndex - 1)
        }

        return nil
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex + 1 < images.count {
            return getContentViewController(withIndex: contentVC.itemIndex + 1)
        }

        return nil
    }

新更新

新:

代码语言:javascript
复制
@IBAction func nextAction(_ sender: Any) {

        let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
        pageController.dataSource = self
        pageController.delegate = self

        let secondController = getContentViewController(withIndex: 1)!
        let contentControllers = [secondController]

        pageController.setViewControllers(contentControllers, direction: .forward, animated: true, completion: nil)

        pageViewController = pageController
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-22 20:55:19

您需要使用此实例方法。

setViewControllers(_ viewControllers: UIViewController?,方向: UIPageViewController.NavigationDirection,动画: Bool,完成:((Bool) -> Void)?=0)

像这样

代码语言:javascript
复制
// self is of type UIPageViewController
self.setViewControllers([vc],direction:.forward,animated:true) { _ in
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-23 06:34:00

代码语言:javascript
复制
@IBAction func nextPageBtnPressed_TouchupInside(_ sender : UIButton ) {
    if let pageViewController = self.parent as? PageViewController {
        pageViewController.goToNextPage()
        pageViewController.changeCurrentPageIndicator(pageViewController: pageViewController)
    }
}


func goToNextPage(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
    if let currentViewController = viewControllers?[0] {
        if let nextPage = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) {
            setViewControllers([nextPage], direction: .forward, animated: animated, completion: completion)
        }
    }


func changeCurrentPageIndicator(pageViewController : DTCPageViewController) {
    pageViewController.view.clipsToBounds = false
    pageViewController.view.sizeToFit()
    let pageContentViewController = pageViewController.viewControllers![0]
    currentIndex = orderViewController.index(of: pageContentViewController)!
    self.pageControl.currentPage = orderViewController.index(of: pageContentViewController)!
}

编写goToNextPage()和changeCurrentPageIndicator()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51469155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档