Я внедряю вступительные экраны для своего приложения, и я добавил кнопки «Следующая» и «Предыдущая», но как вызвать следующую и предыдущую страницу при нажатии кнопки ниже, мой код для реализации управления страницей
Ниже моя Storyboard
сценарий
ViewController
Container View (Embed With Page ViewController)
Next Previous Button(This Button is not inside PageViewController)
Итак, выше приведен сценарий моей раскадровки, а теперь ниже приведен мой код для прокрутки страниц с контролем страниц
class IntroOutGoingViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
//MARK: - VARIABLEs
enum PageViews: String {
case firstPV
case secondPV
case thirdPV
case fourthPV
case fifthPV
case sixthPV
case sevenPV
case eightPV
case ninePV
case tenPV
case elevenPV
case twelPV
}
var pageControl = UIPageControl()
fileprivate lazy var orderedViewController: [UIViewController] = {
return [self.getViewController(withIdentifier: PageViews.firstPV.rawValue),
self.getViewController(withIdentifier: PageViews.secondPV.rawValue),
self.getViewController(withIdentifier: PageViews.thirdPV.rawValue),
self.getViewController(withIdentifier: PageViews.fourthPV.rawValue),
self.getViewController(withIdentifier: PageViews.fifthPV.rawValue),
self.getViewController(withIdentifier: PageViews.sixthPV.rawValue),
self.getViewController(withIdentifier: PageViews.sevenPV.rawValue),
self.getViewController(withIdentifier: PageViews.eightPV.rawValue),
self.getViewController(withIdentifier: PageViews.ninePV.rawValue),
self.getViewController(withIdentifier: PageViews.tenPV.rawValue),
self.getViewController(withIdentifier: PageViews.elevenPV.rawValue),
self.getViewController(withIdentifier: PageViews.twelPV.rawValue)]
}()
fileprivate func getViewController(withIdentifier identifier: String) -> UIViewController
{
return (storyboard?.instantiateViewController(withIdentifier: identifier))!
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewController.firstIndex(of: viewController) else { return nil }
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else { return nil }
guard orderedViewController.count > previousIndex else { return nil }
return orderedViewController[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewController.firstIndex(of: viewController) else { return nil }
let nextIndex = viewControllerIndex + 1
guard nextIndex < orderedViewController.count else { return nil }
guard orderedViewController.count > nextIndex else { return nil }
return orderedViewController[nextIndex]
}
func presentationCount(for: UIPageViewController) -> Int {
return orderedViewController.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
//MARK: - OUTLETs
//MARK: - VOID METHODs
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
if let firstVC = orderedViewController.first {
setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
}
configurePageControl()
overrideUserInterfaceStyle = .light
// Do any additional setup after loading the view.
}
//MARK: - CLICKED EVENTs
//MARK: - FUNCTIONs
func configurePageControl(){
pageControl = UIPageControl(frame: CGRect(x: 150, y: 755 - 50, width: 114, height: 37))
pageControl.numberOfPages = orderedViewController.count
pageControl.currentPage = 0
pageControl.pageIndicatorTintColor = UIColor(red: 218/255, green: 224/255, blue: 238/255, alpha: 1)
pageControl.currentPageIndicatorTintColor = UIColor(red: 0/255, green: 119/255, blue: 255/255, alpha: 1)
pageControl.translatesAutoresizingMaskIntoConstraints = false
let leading = NSLayoutConstraint(item: pageControl, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
let trailing = NSLayoutConstraint(item: pageControl, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
let bottom = NSLayoutConstraint(item: pageControl, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: -10)
view.insertSubview(pageControl, at: 0)
view.bringSubviewToFront(pageControl)
view.addConstraints([leading, trailing, bottom])
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
let pageController = pageViewController.viewControllers![0]
self.pageControl.currentPage = orderedViewController.firstIndex(of: pageController)!
print(pageController)
}
}
С указанным выше кодом на прокрутке я могу вызвать следующий страница и предыдущая страница, но проблема в том, что кнопка «Далее и предыдущий» находится в другом ViewController, так как я могу управлять этим ViewController, пожалуйста, помогите мне