UIPageViewController.Как настроить массив пользовательских UIViewControllers - PullRequest
0 голосов
/ 28 мая 2019

У меня есть набор из 4 контроллеров UIViewController, у каждого из них есть свой собственный класс, и у меня настроены делегаты.На данный момент в моем главном представлении есть контейнерные представления, которые прокручиваются за пределами экрана, и именно так я делаю «контроллер просмотра псевдостраничных страниц».Однако ради обучения я хотел преобразовать это в реальный контроллер просмотра страниц, используя UIPageViewController.
Я видел кучу учебных пособий, но большинство людей просто используют один контроллер представления и изменяют текст внутри него, чтобы отобразить несколько,В моем случае у меня есть 4 пользовательских контроллера представления:

var glanceController: GlanceVC!
var goalsController: GoalsVC!
var commuteController: CommuteVC!
var compareController: CompareVC!

На моем предыдущем контроллере просмотра псевдостраничных страниц я инициализировал их следующим образом:

func loadVC() {
    glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC
    goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC
    commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC
    compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC
}

Теперь, насколько я понимаю, нужен UIPageViewControllerмассив UIViewControllers.Однако я не могу создать этот массив:

var VCArray: [UIViewController] = [glanceController, goalsController, commuteController, compareController]

ошибка: невозможно использовать элемент экземпляра 'glancecontrolleer' в инициализаторе свойств.

Я попытался вместо этого объявить пустой массив var VCArray: [UIViewcontroller]= [] и затем добавление после

func loadVC() {
    glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC
    goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC
    commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC
    compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC
    VCArray += glanceController
}

, однако также имеется ошибка: «Тип аргумента @value glanceVC? не соответствует ожидаемому типу« Последовательность ».

Может кто-нибудь мне помочьсделать этот массив пользовательских контроллеров представления для моего uipageview?

1 Ответ

1 голос
/ 28 мая 2019

Создать вычисляемое свойство и вернуть массив контроллеров представления

var VCArray: [UIViewController] {
    if let glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC,
        let goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC,
        let commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC,
        let compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC {
            return [glanceController, goalsController, commuteController, compareController]
    }
    return []
}
...