Xcode/Swift
相对较新,但在其他语言方面有一定经验。
我正处于应用程序的初期阶段,并且正在尝试实现以下功能:
在UIPageView
环境中,当用户向前滑动时,标签(其值为整数)会增加1.当用户向后滑动时,标签会减1。
我有一个UIViewController
作为故事板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
}
}
答案 0 :(得分:1)
我认为这可能是因为一旦你改变方向,最近的UIViewController仍然在内存中,因此不会调用委托函数。
我建议改用pageViewControllerWillTransitionTo
功能。每次刷卡时都应该调用此方法。同样,如果您希望在滑动后进行调用,则可以使用pageViewControllerDidFinishAnimating
。
为了检测您滑动的方向,您可以尝试同时使用UISwipeGestureRecognizer,并调用将递增/递减变量值的函数。实际上,现在我考虑一下,你可能只能在没有委托功能的情况下使用这个手势识别器。由你决定。