Невозможно подключить кнопки на контроллере просмотра страниц и использовать кнопку для перехода к следующему экрану - PullRequest
0 голосов
/ 11 ноября 2018

В данный момент у меня есть простые экраны Onboarding / walkthrough, но вы можете только проводить между ними. Я хочу добавить кнопку «Далее» и «Назад». Я добавил следующую кнопку на раскадровку и попытался подключить ее как IBAction к моему файлу PageViewController.swift, но на самом деле он не подключится. Я также пытался создать кнопку программно и просто печатать на консоли при нажатии, но я не знаю, как заставить ее выполнить то же действие, что и при смахивании?

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {


    var pageControl = UIPageControl()

    // MARK: UIPageViewControllerDataSource


    lazy var orderedViewControllers: [UIViewController] = {
        return [self.newVc(viewController: "sbBlue"),
                self.newVc(viewController: "sbRed")]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        self.delegate = self



        // This sets up the first view that will show up on our page control
        if let firstViewController = orderedViewControllers.first {
            setViewControllers([firstViewController],
                               direction: .forward,
                               animated: true,
                               completion: nil)
        }

        configurePageControl()

        // Do any additional setup after loading the view.
    }

    func configurePageControl() {
        // The total number of pages that are available is based on how many available colors we have.
        pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 50,width: UIScreen.main.bounds.width,height: 50))
        self.pageControl.numberOfPages = orderedViewControllers.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.white
        self.pageControl.pageIndicatorTintColor = UIColor.lightGray
        self.pageControl.currentPageIndicatorTintColor = UIColor.white
        self.view.addSubview(pageControl)



    }

    func newVc(viewController: String) -> UIViewController {
        return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController)
    }


    // MARK: Delegate methords
    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        let pageContentViewController = pageViewController.viewControllers![0]
        self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewController)!
    }

    // MARK: Data source functions.
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
            return nil
        }

        let previousIndex = viewControllerIndex - 1

        // User is on the first view controller and swiped left to loop to
        // the last view controller.
        guard previousIndex >= 0 else {
            //return orderedViewControllers.last
            // Uncommment the line below, remove the line above if you don't want the page control to loop.
            return nil
        }

        guard orderedViewControllers.count > previousIndex else {
            return nil
        }

        return orderedViewControllers[previousIndex]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
            return nil
        }

        let nextIndex = viewControllerIndex + 1
        let orderedViewControllersCount = orderedViewControllers.count

        // User is on the last view controller and swiped right to loop to
        // the first view controller.
        guard orderedViewControllersCount != nextIndex else {
            //return orderedViewControllers.first
            // Uncommment the line below, remove the line above if you don't want the page control to loop.
            return nil
        }

        guard orderedViewControllersCount > nextIndex else {
            return nil
        }

        return orderedViewControllers[nextIndex]
    }
}

Это была кнопка, созданная с кодом:

   let nextButton = UIButton()

    private func setupView() {



        nextButton.frame = CGRect(x: self.view.frame.size.width - 60, y: 60, width: 50, height: 50)
        nextButton.backgroundColor = UIColor.red
        nextButton.setTitle("YourButtonTitle", for: .normal)
        nextButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        self.view.addSubview(nextButton)

    }


    @objc func buttonAction(sender: UIButton!) {

        print("ButtonTapped")

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете перемещаться между контроллерами, используя setViewControllers(_:animated:). Я бы порекомендовал использовать pageViewController:viewControllerBeforeViewController: и pageViewController:viewControllerAfterViewController:, чтобы выяснить, какой контроллер показать, а затем использовать setViewControllers(_:animated:) для ручного перемещения между страницами.

...