gpt4 book ai didi

swift - 更新 UIPageView 中的标签

转载 作者:行者123 更新时间:2023-11-28 15:51:48 28 4
gpt4 key购买 nike

Xcode/Swift 相对较新,但有一些其他语言的经验。

我正处于应用程序的初级阶段,正在尝试实现以下功能:

UIPageView环境中,当用户向前滑动时,标签(其值为整数)增加1。当用户向后滑动时,标签减少1。

我有一个 UIViewController 作为 Storyboard ID PageContentViewController 的内容页面。

基本上,我的想法是声明一个初始设置为 0 的整数变量,然后创建一个 swipedBack()swipedRight() 函数来更新变量的值然后将 PageContentViewController 上的标签文本设置为该变量的值。这些函数然后返回新的 PageContentViewController

我遇到了一些奇怪的行为。也就是说,该应用正在构建并运行良好。

初始屏幕加载标签为 0。然后我向前滑动,它更新为 1。但是然后......如果我再次向前滑动,标签保持为 1。但是然后......如果我继续前进,它就会按预期运行 - 转到 2,然后是 3。然后如果我反向,它会变得更加奇特。

如果我的值为 4,然后向后滑动,它会减少到 3。但是再次向后滑动它会回到 4,然后继续滑动,它会按预期运行 (4,3,2 ,1...)。我显然有概念上的误解,希望得到一些帮助。

这是我的代码:

import UIKit

class ViewController: UIPageViewController, UIPageViewControllerDataSource {

var arrPageTitle: NSArray = NSArray()

var t: Int = 0

override func viewDidLoad() {
super.viewDidLoad()

self.dataSource = self

self.setViewControllers([getViewControllerAtIndex()] as [UIViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
return swipedBack()
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
return swipedForward()
}

func getViewControllerAtIndex() -> PageContentViewController {
let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageContentViewController") as! PageContentViewController

pageContentViewController.strTitle = "\(t)"
return pageContentViewController
}

func swipedForward() -> PageContentViewController {

let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageContentViewController") as! PageContentViewController

t = t + 1

pageContentViewController.strTitle = "\(t)"
return pageContentViewController

}

func swipedBack() -> PageContentViewController {

let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageContentViewController") as! PageContentViewController

t = t - 1
pageContentViewController.strTitle = "\(t)"
return pageContentViewController

}

}

最佳答案

我想这可能是因为一旦你改变方向,最近的 UIViewController 还在内存中,因此委托(delegate)函数没有被调用。

我建议改用 pageViewControllerWillTransitionTo 函数。每次滑动时都应调用此方法。同样,如果您希望在滑动后调用,您可以使用 pageViewControllerDidFinishAnimating

为了检测您滑动的方向,您可以尝试同时使用 UISwipeGestureRecognizer,并调用将递增/递减变量值的函数。实际上,现在我想起来了,你也许可以在没有委托(delegate)功能的情况下使用这个手势识别器。由你决定。

关于swift - 更新 UIPageView 中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199995/

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