我将页面 View Controller 嵌入到容器 View 中。包含容器 View 的 View Controller 不是主视图 Controller ,因此我的程序崩溃了。
import UIKit
class CarsSwipe: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
lazy var viewControllersList:[UIViewController] = {
let sb = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "carsSwipe")
let vc1 = sb.instantiateViewController(withIdentifier: "blueView")
let vc2 = sb.instantiateViewController(withIdentifier: "orangeView")
let vc3 = sb.instantiateViewController(withIdentifier: "blackView")
return [vc1, vc2, vc3]
}()
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllersList.firstIndex(of: viewController) else {return nil}
let previousIndex = vcIndex - 1
guard previousIndex >= 0 else {return nil}
guard viewControllersList.count > previousIndex else {return nil}
return viewControllersList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllersList.firstIndex(of: viewController) else {return nil}
let nextIndex = vcIndex + 1
guard viewControllersList.count != nextIndex else {return nil}
guard viewControllersList.count > nextIndex else {return nil}
return viewControllersList[nextIndex]
}
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
if let firsViewControlller = viewControllersList.first {
self.setViewControllers([firsViewControlller], direction: .forward, animated: true, completion: nil)
}
}
}
我希望 PageViewController 在 View Controller 内的容器中滚动
最佳答案
错误在这一行:
let sb = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "carsSwipe")
删除 .instantiateViewController(withIdentifier: "carsSwipe")
并应成功编译。
因为下面代码中的 sb
不是 UIStoryboard
而是 View Controller :
let vc1 = sb.instantiateViewController(withIdentifier: "blueView")
let vc2 = sb.instantiateViewController(withIdentifier: "orangeView")
let vc3 = sb.instantiateViewController(withIdentifier: "blackView")
关于ios - 使用 "main"作为 Storyboard失败,因为 View Controller 不是主 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394775/