Я пытаюсь использовать UIPageViewController
в приложении Swift с несколькими контроллерами представлений. У меня есть 2 контроллера вида на моем раскадровке (firstViewController
и secondViewController
), которые встроены в свои собственные контроллеры навигации. У них есть идентификаторы раскадровки "firstViewController
" и "secondViewController
". У меня также есть контроллер просмотра страниц на моей раскадровке с контроллером identifierPageView
и установите навигацию в горизонтальном и переходном стиле для прокрутки в инспекторе атрибутов. firstViewController
- это контроллер корневого представления приложения
Я хочу, чтобы firstViewController
была первой страницей контроллера просмотра страницы, поэтому я написал свой класс следующим образом:
import Foundation
import UIKit
class FirsttViewController: UITableViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
override func viewDidLoad() {
let pageViewController: PageViewController = self.storyboard.instantiateViewControllerWithIdentifier("PageViewController") as PageViewController
pageViewController.delegate = self
var viewControllers: [UIViewController] = [self]
pageViewController.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
self.addChildViewController(pageViewController)
self.view.addSubview(pageViewController.view)
pageViewController.didMoveToParentViewController(self)
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! {
let secondViewController: SecondViewController = self.storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
return secondViewController
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {
return nil
}
func presentationCountForPageViewController(pageViewController: UIPageViewController!) -> Int {
return 2
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController!) -> Int {
return 0
}
}
файл для secondViewController
выглядит следующим образом:
import Foundation
import UIKit
class SecondViewController: UITableViewController, UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController!, viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! {
return nil
}
func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! {
let firstViewController: FirstViewController = self.storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as FirstViewController
return firstViewController
}
}
Однако, когда я запускаю свое приложение, у него нет контроллера просмотра страниц. Он просто показывает firstViewController
и что он. Нет точек, нет страниц и т.д. Кто-нибудь знает, что случилось? Я нашел несколько учебников по Objective-C, но все они покрывают с помощью одного контроллера вида для всех страниц и имеют контроллер корневого представления, который не является страницей в pageView
, поэтому они не слишком помогают. Я надеялся, что это будет похоже на использование tabBarController
, где вы просто щелкаете мышью и перетаскиваете их в контроллеры представлений, но это не так, к сожалению. как я сказал, что я не работал с одним из них раньше, поэтому я как бы потерял.
обновление:
после предложения iiFreeman, я подклассифицировал UIPageViewController
и сделал его корнем в моем файле раскадровки. ниже подкласс
import Foundation
import UIKit
class PageViewController: UIPageViewController {
override func viewDidLoad() {
let startingViewController = self.storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as FirstViewController
self.dataSource = startingViewController
var viewControllers: [UIViewController] = [startingViewController]
self.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
}
Однако теперь приложение просто зависает на черном экране, а в конечном итоге Xcode теряет соединение с симулятором. Я не совсем уверен, что.