gpt4 book ai didi

ios - 更新 ViewController 不更新 PageViewController 点

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:29 25 4
gpt4 key购买 nike

我正在尝试呈现一个带有 3 个 ContentViewController 的 PageViewController,用户可以在其中从一个页面移动到下一个页面,还可以使用计时器自动滚动到下一个页面。

第一个问题:如何让页面 View Controller 正确更新页面底部的点。

我已经实现了三页 PageViewController 并且有一个基于计时器的自动化。计时器调用:

@objc func animation() {
if counter < 2 {counter += 1}
else {counter = 0}
self.pageViewController.setViewControllers([self.pageTutorialAtIndex(counter)], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
}

调用 setViewControllers 会改变 View 。 但是,它不会更新页面底部的 PageViewController 点。需要做什么来解决这个问题?

很明显,这个类级别的计数器没有得到当前显示的 ViewContoller,这引出了我的第二个问题。

第二个问题: 如何正确地实现从显示的页面获取当前索引?我试过:

let current = self.pageTutorialAtIndex(0) as SplashContentViewController
var counter : Int = current.pageIndex!

认为这是读取当前页,但似乎只读取第 0 页。

类和 viewDidLoad 是:

class SplashViewController: UIViewController, UIPageViewControllerDataSource {

var pageImages:NSArray!
var pageTitles:[String]!
var pageTexts:[String]!
var pageViewController:UIPageViewController!
var waitTimer : Timer!
var counter : Int = 0

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

pageImages = NSArray(objects:"sp_image1","sp_image2","sp_image3")
pageTitles = [NSLocalizedString("sp_title1",comment: ""), NSLocalizedString("sp_title2", comment: ""), NSLocalizedString("sp_title3", comment: "")]
pageTexts = [NSLocalizedString("sp_detail1",comment: ""), NSLocalizedString("sp_detail2", comment: ""), NSLocalizedString("sp_detail3", comment: "")]

self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "SplashPageViewController") as! UIPageViewController
self.pageViewController.dataSource = self
let initialContenViewController = self.pageTutorialAtIndex(0) as SplashContentViewController
self.pageViewController.setViewControllers([initialContenViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMove(toParentViewController: self)
}

通过实现委托(delegate)方法:

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
{
let viewController = viewController as! SplashContentViewController
var index = viewController.pageIndex as Int
if(index == 0 || index == NSNotFound){return nil}
index -= 1
return self.pageTutorialAtIndex(index)
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
{
let viewController = viewController as! SplashContentViewController
var index = viewController.pageIndex as Int
if((index == NSNotFound)){return nil}
index += 1
if(index == pageImages.count){return nil}
return self.pageTutorialAtIndex(index)
}

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

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

最佳答案

我似乎找到了一个可能的答案:

第一个问题:如何让页面 View Controller 正确更新页面底部的点。而不是返回 0,返回当前计数器提供了权利。

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

第二个问题:如何实现获取当前索引?在我的解决方案中,计数器变量标识当前页面。它无法从显示的页面正确获取索引,但可以正常工作。

全局计数器变量的实现是:

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
{
let viewController = viewController as! SplashContentViewController
let index = viewController.pageIndex as Int

if(index == NSNotFound){
return nil
}
if(index > 0){
counter = index - 1
return self.pageTutorialAtIndex(counter)
} else {
counter = 0
return nil
}
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
{
let viewController = viewController as! SplashContentViewController
let index = viewController.pageIndex as Int
if((index == NSNotFound)){
return nil
}
if (index < pageImages.count - 1) {
counter = index + 1
return self.pageTutorialAtIndex(counter)
} else {
counter = pageImages.count - 1
return nil
}
}

关于ios - 更新 ViewController 不更新 PageViewController 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572561/

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