【问题标题】:Page View controller in container view with data from model包含模型数据的容器视图中的页面视图控制器
【发布时间】:2017-03-30 17:10:55
【问题描述】:

我有一个显示页面视图控制器的容器视图。这个视图控制器然后显示 2 个相同的视图控制器,我可以来回翻页。

        import UIKit

class ViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pages = [UIViewController]()

override func viewDidLoad() {
super.viewDidLoad()

self.delegate = self
self.dataSource = self

let page1: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "page1")
let page2: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "page2")

pages.append(page1)
pages.append(page2)

setViewControllers([page1], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.index(of: viewController)!
let previousIndex = abs((currentIndex - 1) % pages.count)
print("previous Index", pages[previousIndex])
return pages[previousIndex]
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.index(of: viewController)!
let nextIndex = abs((currentIndex + 1) % pages.count)
print("next Index", pages[nextIndex])
return pages[nextIndex]
}

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

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

我想做的是只创建一个视图控制器,然后用数组中的数据填充该视图控制器

数组:

var pageTitles : Array<String> = ["God vs Man", "Cool Breeze", "Fire Sky"]
var pageImages : Array<String> = ["page1.png", "page2.png", "page3.png"]

如果容器视图控制器呈现页面视图控制器,这是否可能?

任何帮助将不胜感激......

丹尼斯·安吉尔

【问题讨论】:

    标签: swift3 uipageviewcontroller


    【解决方案1】:

    如果您只想管理一个具有多数据和UIPageController 的控制器,您应该创建一个视图控制器并执行类似的操作:

    class PageViewController: UIViewController { // Id: 'PageViewController'
        // MARK: @IBOutlet
    
        /// Menu button item.
        @IBOutlet weak var image: UIImageView!
    
        /// Pagination controller.
        @IBOutlet weak var pagination: UIPageControl!
    
        // MARK: Variable
        struct Page {
            var title: String
            var image: String
            init(title: String, image: String) {
                self.title = title
                self.image = image
            }
        }
        let data: [Page] = []
        var currentIndex = 0
    
        override func viewDidLoad() {
            // Init data
            data.append(Page(title: "title1" , image: "page1.png"))
            data.append(Page(title: "title2" , image: "page2.png"))
    
            setValues(currentIndex)
    
            // Setup slide handler
            let leftSwipe = UISwipeGestureRecognizer(target: self,
                                                     action: #selector(PageViewController(_:)))
            let rightSwipe = UISwipeGestureRecognizer(target: self,
                                                      action: #selector(PageViewController(_:)))
            leftSwipe.direction = .left
            rightSwipe.direction = .right
            self.view.addGestureRecognizer(leftSwipe)
            self.view.addGestureRecognizer(rightSwipe)
        }
    
        /**
         Handle swipes allows to switch page.
         */
        func handleSwipes(_ sender: UISwipeGestureRecognizer) {
            let size = self.data.count
            let currentPosition = self.pagination.currentPage
    
            if sender.direction == .left && currentPosition < size-1 {
                nextPage()
            } else if sender.direction == .right && currentPosition > 0 {
                previousPage()
            }
        }
    
        private func setValues(index: Int) {
            self.pagination.currentPage = currentIndex
            self.title = pageTitles[index]
            self.image = pageImages[index]
        }
    
        // Button or see UIPageControl @IBOutlet
        private func nextPage() {
            currentIndex = abs((currentIndex + 1) % pages.count)
            print("next Index", pages[currentIndex])
            setValues(currentIndex)
        }
    
        // Button or see UIPageControl @IBOutlet
        private func previousPage() {
            currentIndex = abs((currentIndex - 1) % pages.count)
            print("next Index", pages[currentIndex])
            setValues(currentIndex)
        }
    
        // Other functions...
        // ...
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多