我希望创建一个非常类似于SnapChat的PageViewController,从而可以从UIImagePickerController滑动到另一个VC。为此,我有我的初始VC显示imagepickercontroller,以及第二个VC(标题VC),我希望在这个初始VC之后。为了封装我的PageViewController,我创建了另一个VC类(如下所示),我现在将其设置为初始VC,并且我正在尝试处理PageVC数据源。
无论出于何种原因,它都无法正常工作并且出现错误 - '致命错误:在展开可选值时意外发现nil'。这是因为你不能在PageVC中包含一个imagePickerController(像SnapChat那样令人怀疑)。我创建了一个更简单的模板,其中包含两个简单的VC - 为什么我不能在这里做到这一点?我做的另一个,我在项目开始的初始VC中包含了以下所有代码,而在这里我创建了一个额外的VC并手动更改它以使其成为“初始视图控制器”。
NB。该项目在没有pageVC的情况下编译得很好,因此它与其他VC中的任何错误代码无关。
我非常困难,非常感谢这个棘手问题的一些帮助。谢谢!
class PageViewController: UIViewController, UIPageViewControllerDataSource {
private var pageViewController: UIPageViewController?
private let VCarray = [ViewController(), CaptionViewController()]
override func viewDidLoad() {
super.viewDidLoad()
createPageViewController()
}
private func createPageViewController() {
let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController
pageController.dataSource = self
if VCarray.count > 0 {
pageController.setViewControllers([ViewController()], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
pageViewController = pageController
addChildViewController(pageViewController!)
self.view.addSubview(pageViewController!.view)
pageViewController!.didMoveToParentViewController(self)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
if viewController.isKindOfClass(CaptionViewController) {
let pvc = self.storyboard?.instantiateViewControllerWithIdentifier("CameraVC")
return pvc
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
if viewController.isKindOfClass(ViewController) {
let pvc = self.storyboard?.instantiateViewControllerWithIdentifier("CaptionVC")
return pvc
}
return nil
}
答案 0 :(得分:0)
我看到的唯一可选展开是在第一行。是抛出异常的地方吗?你确定你的主控制器有一个与之相关的故事板吗?如果是这样,你确定故事板包含一个名为“PageController”的控制器吗?