以编程方式推进uipageViewController语言 - Swift



这是我第一次尝试iOS应用程序,我没有Swift的经验,很多代码都从网络上借来并进行了编辑。

我正在尝试创建一组幻灯片。我从主登录页面转到另一个视图控制器,该控制器运行幻灯片。着陆页和幻灯片工作。我可以来回滑动。我现在正在尝试添加一个计时器,以便每5秒左右滑动自动推进。

我相信需要运行的代码是:

pageViewController.setViewControllers(varPageVC, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)

我有一个错误

test.swift:31:9: Ambiguous reference to member 'pageViewController(_:viewControllerBefore:)'.

我不知道如何解释此错误并前进。该错误是在test.swift中触发的,其中计时器调用试图推进幻灯片的函数。建议表示赞赏。如果我做错了,请把我指向适当的方向。

着陆页有一个按钮,可以打开ViewController testvc。我有2个文件,test.swiftalphabetItemController.swift。故事板除了登录页面ViewController外,还有一个称为AlphabetPVC的PageViewController,称为AlphabetVC的ViewController和一个称为TestVC的ViewController

这是AlphabetItemController.swift ...

的代码
import UIKit
class alphabetItemController: UIViewController {
    @IBOutlet weak var contentImageView2: UIImageView!
    @IBOutlet weak var contentWordPn: UILabel!
    var itemIndex: Int = 0
    var imageName: String = ""
    var wordPN: String = ""
    var tTime: Timer!
    override func viewDidLoad() {
        super.viewDidLoad()
        contentImageView2!.image = UIImage(named: imageName)
        contentWordPn!.text = wordPN
    }
}

这是测试的代码。Swift...

import Foundation
import UIKit
class testItemController: UIViewController, UIPageViewControllerDataSource {
    var tTime: Timer!
    override func viewDidLoad() {
        super.viewDidLoad()
        createPageViewController()
        setupPageControl()
        tTime = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(changeSlide), userInfo: nil, repeats: true)
        //tTime = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(goToNextPage), userInfo: nil, repeats: true)
    }

    func changeSlide() {
        pageViewController.setViewControllers(varPageVC, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
    }

    // MARK: - Variables
    private var varPageVC: UIPageViewController?

    private let contentTextWordPN = ["A", "B", "C", "D", "E"]
    private let contentCount = 5 //TODO ADJUST THIS FOR EACH COLLECTION

    private func createPageViewController() {
        let pageController = self.storyboard!.instantiateViewController(withIdentifier: "alphabetPVC") as! UIPageViewController
        pageController.dataSource = self
        if contentCount > 0 {
            let firstController = getItemController(itemIndex: 0)!
            let startingViewControllers = [firstController]
            pageController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
        }
        varPageVC = pageController
        addChildViewController(varPageVC!)
        self.view.addSubview(varPageVC!.view)
        varPageVC!.didMove(toParentViewController: self)
    }
    private func setupPageControl() {
        let appearance = UIPageControl.appearance()
        appearance.pageIndicatorTintColor = UIColor.gray
        appearance.currentPageIndicatorTintColor = UIColor.white
        appearance.backgroundColor = UIColor.darkGray
    }
    func pageViewController(_ varPageVC: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let itemController = viewController as! alphabetItemController
        if itemController.itemIndex > 0 {
            return getItemController(itemIndex: itemController.itemIndex-1)
        }
        return nil
    }
    func pageViewController(_ varPageVC: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let itemController = viewController as! alphabetItemController
        if itemController.itemIndex+1 < contentCount {
            return getItemController(itemIndex: itemController.itemIndex+1)
        }
        return nil
    }
    private func getItemController(itemIndex: Int) -> alphabetItemController? {
        if itemIndex < contentCount {
            let pageItemController = self.storyboard!.instantiateViewController(withIdentifier: "alphabetVC") as! alphabetItemController
            pageItemController.itemIndex = itemIndex
            pageItemController.imageName = "alphabet_" + String(format: "%02d", (itemIndex + 1)) //alphabet_01
            pageItemController.wordPN = contentTextWordPN[itemIndex]

            return pageItemController
        }
        return nil
    }
    func presentationCountForPageViewController(varPageVC: UIPageViewController) -> Int {
        return contentCount
    }
    func presentationIndexForPageViewController(varPageVC: UIPageViewController) -> Int {
        return 0
    }
    func currentControllerIndex() -> Int {
        let pageItemController = self.currentController()
        if let controller = pageItemController as? alphabetItemController {
            return controller.itemIndex
        }
        return -1
    }
    func currentController() -> UIViewController? {
        if (self.varPageVC?.viewControllers?.count)! > 0 {
            return self.varPageVC?.viewControllers![0]
        }
        return nil
    }
}
extension UIPageViewController {
    func goToNextPage(animated: Bool = true) {
        guard let currentViewController = self.viewControllers?.first else { return }
        guard let nextViewController = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) else { return }
        setViewControllers([nextViewController], direction: .forward, animated: animated, completion: nil)
    }
    func goToPreviousPage(animated: Bool = true) {
        guard let currentViewController = self.viewControllers?.first else { return }
        guard let previousViewController = dataSource?.pageViewController(self, viewControllerBefore: currentViewController) else { return }
        setViewControllers([previousViewController], direction: .reverse, animated: animated, completion: nil)
    }
}

甚至还有一个扩展名UIPageViewController,但我不知道如何调用gotOnextPage函数。

我最终更改了 changeSlide()函数...我已经在扩展程序中具有下一个幻灯片函数,只有语法称呼它是避开我的...我在上面找到了一些示例因此并将它们用作参考:

func changeSlide() {
    varPageVC?.goToNextPage()
}

最新更新