Я довольно новичок в Swift, и поэтому у меня довольно серьезная проблема c, но я не могу найти ответ на нее. У меня есть ViewController с представлением контейнера. Контроллер страниц встроен в представление контейнера, и я могу прокручивать различные страницы, но проблема, с которой я столкнулся, заключается в том, что я хочу изменить страницы, основываясь на кнопке, которую я нажимаю в ViewController.
Это мой код для моего PageController:
var pageIndex = 0
class FirstViewController: UIViewController {
@IBOutlet weak var FirstButton: UIButton!
@IBOutlet weak var SecondButton: UIButton!
@IBOutlet weak var currentView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func FirstButtonAction(_ sender: Any) {
SecondButton.backgroundColor = UIColor.black
SecondButton.setTitleColor(.white, for: .normal)
FirstButton.backgroundColor = UIColor.white
FirstButton.setTitleColor(.black, for: .normal)
pageIndex = 0
}
@IBAction func SecondButtonAction(_ sender: Any) {
FirstButton.backgroundColor = UIColor.black
FirstButton.setTitleColor(.white, for: .normal)
SecondButton.backgroundColor = UIColor.white
SecondButton.setTitleColor(.black, for: .normal)
pageIndex = 1
}
}
class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
lazy var viewControllerList:[UIViewController] = {
let sb = UIStoryboard(name: "Main", bundle: nil)
let vc1 = sb.instantiateViewController(withIdentifier: "FirstVC")
let vc2 = sb.instantiateViewController(withIdentifier: "SecondVC")
return [vc1, vc2]
}()
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
pageIndex = vcIndex - 1
guard pageIndex >= 0 else {return nil}
guard viewControllerList.count > 0 else {return nil}
return viewControllerList[pageIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
pageIndex = vcIndex + 1
guard viewControllerList.count != pageIndex else {return nil}
guard viewControllerList.count > pageIndex else {return nil}
return viewControllerList[pageIndex]
}
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
if let firstViewController = viewControllerList.first {
self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
}
}
В основном это поиск в Google и видео на YouTube, поэтому, если мой код выглядит нестабильным где-либо еще, пожалуйста, скажите мне, как почини это. Любые рекомендации?
Изображения, показывающие вид результата, который я ищу (довольно просто, наверное):
ОБНОВЛЕНИЕ: Я пытался добавить это, но это не сработало:
@IBAction func SecondButtonAction(_ sender: Any) {
guard let currentViewController =
PageViewController().viewControllerList.first else { return }
guard let nextViewController =
PageViewController().dataSource?.pageViewController(PageViewController(), viewControllerAfter: currentViewController) else { return }
PageViewController().setViewControllers([nextViewController], direction: .forward, animated: false, completion: nil)
}