Ios 清空UIPageViewController(删除内部的ViewController)
如何在Swift中删除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不会像您所想的那
pageViewController.setViewControllers(nil,....)
pageViewController.setViewControllers([UIViewController(),....)
两者都会使我的应用程序崩溃,并显示以下消息:
提供的视图控制器数量(0)与请求的转换所需的数量(1)不匹配AUIPageViewController
不会像您所想的那样“保持视图控制器”。它所做的只是显示由其数据源返回的视图控制器。。。而它的数据源
就是你的代码
如果您只是这样做:
[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")
}