Ios 内部带有导航控制器的PageViewController
我有一个pageviewcontroller,我想在其中包含多个导航控制器。我保留错误类型HomeViewController不符合UIPageViewController数据源Ios 内部带有导航控制器的PageViewController,ios,swift,uipageviewcontroller,Ios,Swift,Uipageviewcontroller,我有一个pageviewcontroller,我想在其中包含多个导航控制器。我保留错误类型HomeViewController不符合UIPageViewController数据源 import UIKit import Firebase import FirebaseAuth class HomeViewController: UIPageViewController, UIPageViewControllerDataSource { let dropDownLauncher = Dr
import UIKit
import Firebase
import FirebaseAuth
class HomeViewController: UIPageViewController, UIPageViewControllerDataSource {
let dropDownLauncher = DropDownLauncher()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
if let firstViewController = viewControllerList.first{
self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
}
// setupView()
}
lazy var viewControllerList: [UINavigationController] = {
let layout = UICollectionViewFlowLayout()
let homeFeedController = HomeFeedController(collectionViewLayout: layout)
let navController = UINavigationController(rootViewController: homeFeedController)
let profileView = ProfileeViewController(collectionViewLayout: layout)
let profileViewNavController = UINavigationController(rootViewController: profileView)
let searchController = EventSearchController(collectionViewLayout: layout)
let searchNavController = UINavigationController(rootViewController: searchController)
return [navController,profileViewNavController,searchNavController]
}()
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UINavigationController) -> UINavigationController? {
guard let vcIndex = viewControllerList.index(of: viewController) else{
return nil
}
let previousIndex = vcIndex - 1
guard previousIndex >= 0 else {
return nil
}
guard viewControllerList.count > previousIndex else{
return nil
}
return viewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UINavigationController) -> UINavigationController? {
guard let vcIndex = viewControllerList.index(of: viewController) else{
return nil
}
let nextIndex = vcIndex + 1
guard viewControllerList.count != nextIndex else{
return nil
}
guard viewControllerList.count > nextIndex else{
return nil
}
return viewControllerList[nextIndex]
}
}
所以我的问题是。
有没有办法有效地执行此操作并消除此错误?
有没有办法控制哪个视图控制器以什么顺序出现?
因为我希望它们的显示顺序是特定的,因为您有一个视图控制器的静态列表,看起来不会改变,所以您应该能够不遵循
UIPageControllerDataSource
,只需在viewDidLoad()中使用setViewControllers(u:direction:animated:completion:)
您可能需要将viewControllerList的类型更改为[UIViewController]
这也意味着您可以完全删除您的方法:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UINavigationController) -> UINavigationController?
及
如果您确实希望符合UIPageControllerDataSource
,则必须使方法签名完全符合要求:
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController?
及
幸运的是,由于UINavigationController是UIViewController的一个子类,其余代码应该可以工作
视图控制器的顺序将与数组中视图控制器列表返回的顺序相同,因为视图控制器的静态列表似乎没有改变,您应该能够不再遵从UIPageControllerDataSource
,只需在viewDidLoad()中使用setViewControllers(uu:direction:animated:completion:)
您可能需要将viewControllerList的类型更改为[UIViewController]
这也意味着您可以完全删除您的方法:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UINavigationController) -> UINavigationController?
及
如果您确实希望符合UIPageControllerDataSource
,则必须使方法签名完全符合要求:
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController?
及
幸运的是,由于UINavigationController是UIViewController的一个子类,其余代码应该可以工作
视图控制器的顺序将与从viewControllerList
返回的数组中的顺序相同。好的,我能够解决这个问题,但我有另一个问题。好的,很高兴听到这个问题,这个答案解决了您所说的最初问题吗?如果是的话,你介意把它作为答案吗?我很乐意帮你解决下一个问题,你能把我链接到SO问题吗?我怎么链接你去你的新问题,把URL复制到URL栏并粘贴到评论中好的,我能解决,但我有另一个问题好的,很高兴听到,这个答案解决了你说的最初的问题吗?如果是的话,你介意把它作为答案吗?我很乐意帮你解决下一个问题,你能帮我链接到SO问题吗?我如何链接你转到你的新问题,在URL栏中复制URL并粘贴到评论中
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController?