gpt4 book ai didi

ios - 快速:UIPageViewController 操作

转载 作者:行者123 更新时间:2023-11-30 11:19:12 24 4
gpt4 key购买 nike

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

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 吗?或者我应该再写一个代码?怎么做?

更新

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
}

新更新

新:

@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
}

最佳答案

您需要使用此实例方法

setViewControllers(_ viewControllers: [UIViewController]?, direction: UIPageViewController.NavigationDirection, animated: Bool, completion: ((Bool) -> Void)? = nil)

像这样

// self is of type UIPageViewController
self.setViewControllers([vc],direction:.forward,animated:true) { _ in
}

关于ios - 快速:UIPageViewController 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com