Я пытаюсь создать небольшое приложение для цитат.Кавычки находятся в массиве объектов.У некоторых есть статья, которая предоставляет больше информации о цитате.
Я использую 2 вида viewcontroller.У одного есть текстовый блок для статьи, а у другого нет.
класс UIPageViewController настроен так, чтобы пользователь мог пролистывать кавычки.Это управляется массивом объектов выше.Код проходит через массив и затем, если в объекте var в объекте есть строка, он показывает одно представление.Если строка пуста, она показывает другую.
Я могу заставить программу поменять местами представления, но счетчик работает неправильно.Это похоже на простую проблему, но я не могу понять это.
Бонус: Мой следующий шаг - выяснить, как в представлении будет отображаться выбранная цитата / автор / статья.Я также был бы очень признателен за любые советы по этому вопросу, так как это все для меня новоСпасибо!
Вот мой код
import UIKit
var thePack:[packItem] = [packItem(theQuote: "quote1", author: "", article: "hasarticle3"),packItem(theQuote: "quote2", author: "", article: ""),packItem(theQuote: "quote3", author: "", article: "hasarticle3")]
var packIndex:Int = 0
class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
//set up the array of views to move to. All the different view types should be in here
lazy var subViewControllers:[UIViewController] = {
return [
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen1") as! ViewController1,
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen2") as! ViewController2
]
}()
//end
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
//set up the initial viewController
setViewControllers([subViewControllers[0]], direction: .forward, animated: true, completion: nil)
}
//set up the before view
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
packIndex -= 1
if(packIndex <= 0){
return nil
}
else{
if thePack[packIndex].article != ""{
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen1") as! ViewController1
}
else{
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen2") as! ViewController2
}
}
}
//set up the after view
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
packIndex += 1
if(packIndex >= thePack.count){
return nil
}
else{
if thePack[packIndex].article != ""{
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen1") as! ViewController1
}
else{
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "screen2") as! ViewController2
}
}
}
//change the transition style so it's not the page curl
required init?(coder: NSCoder) {
super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
}
//MARK UIPageViewController DataSource
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return subViewControllers.count
}
}