Ios 清空UIPageViewController(删除内部的ViewController)

Ios 清空UIPageViewController(删除内部的ViewController),ios,objective-c,swift,Ios,Objective C,Swift,如何在Swift中删除UIPageViewController中的所有ViewController 这些呼吁: pageViewController.setViewControllers(nil,....) pageViewController.setViewControllers([UIViewController(),....) 两者都会使我的应用程序崩溃,并显示以下消息:提供的视图控制器数量(0)与请求的转换所需的数量(1)不匹配AUIPageViewController不会像您所想的那

如何在Swift中删除UIPageViewController中的所有ViewController

这些呼吁:

pageViewController.setViewControllers(nil,....)
pageViewController.setViewControllers([UIViewController(),....)

两者都会使我的应用程序崩溃,并显示以下消息:
提供的视图控制器数量(0)与请求的转换所需的数量(1)不匹配
A
UIPageViewController
不会像您所想的那样“保持视图控制器”。它所做的只是显示由其
数据源返回的视图控制器。。。而它的
数据源
就是你的代码

如果您只是这样做:

[pageViewController setViewControllers:@[UIViewController.new] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
这将用一个空的UIViewController替换当前的“页面”——但它不会做任何其他事情。您仍然可以滚动,这取决于您的下一个/上一个逻辑,这可能会导致其他错误

您要做的是用该行“清除”当前页面,但也要防止滚动/滑动。这通常是通过将
UIPageViewController
dataSource
设置为nil来实现的。

Don解释的2020年: 正如@DonMag所解释的那样。你能做的就是

  • 只需将当前的VC替换为空白VC即可

  • 将页视图控制器的数据源设置为null

  • 重要的注意事项

    •在你的应用程序中有一个“空白”VC到底意味着什么?它可以是,你作为特殊的视图控制器(这只是“灰色云”或“没有数据的解释”或其他东西)使用

    •但实际上,您可以安全地使用
    UIViewController()
    ,它将是空白的,没有任何内容

    •对于第2点,不要忘记将其设置为后退

    实际上。。。类似于。。。
    var vcs: [UIViewController] = []
    
    func reloadPages() {
        print("reload pages in your page view controller")
        let k = yourData.count
    
        if k == 0 {
            dataSource = nil
            setViewControllers([UIViewController()], direction: .forward, animated: false)
            return
        }
        
        dataSource = self
        
        vcs = []
        for i in 0..<k {
            let vc = _sb("SomePageOfYours") as! SomePageOfYours
            vcs.append(vc)
        }
        
        setViewControllers([vcs[0]], direction: .forward, animated: false)
    }
    
    func _sb(_ s: String) -> UIViewController {
        // assume the storyboard id is set as ClassNameID
        return UIStoryboard(name: s, bundle: nil)
           .instantiateViewController(withIdentifier: s + "ID")
    }