gpt4 book ai didi

ios - 内部带有导航 Controller 的 PageViewController

转载 作者:行者123 更新时间:2023-11-28 08:02:57 25 4
gpt4 key购买 nike

我有一个 pageviewcontroller,我想在其中包含多个导航 Controller 。我保留错误类型 HomeViewController does not conform to UIPageViewController DataSource。

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]
}

}

所以我的问题是。有没有办法有效地做到这一点并消除这个错误?有没有办法控制哪个 View Controller 以什么顺序出现?因为我希望它们按一定的顺序出现

最佳答案

因为你有一个看起来不会改变的静态 View Controller 列表,你应该能够取消符合 UIPageControllerDataSource 并简单地使用 setViewControllers(_:direction :animated:completion:) 在 vi​​ewDidLoad() 中

override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.setViewControllers(self.viewControllerList, direction: .forward, animated: true, completion: nil)
}

https://developer.apple.com/documentation/uikit/uipageviewcontroller/1614087-setviewcontrollers

您可能需要将 viewControllerList 的类型更改为 [UIViewController]

这也意味着您可以完全删除您的方法:

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UINavigationController) -> UINavigationController?

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UINavigationController) -> UINavigationController? {

如果您确实想要符合 UIPageControllerDataSource,您必须让方法签名完全符合要求:

func pageViewController(_ pageViewController: UIPageViewController, 
viewControllerBefore viewController: UIViewController) -> UIViewController?

func pageViewController(_ pageViewController: UIPageViewController, 
viewControllerAfter viewController: UIViewController) -> UIViewController?

幸运的是,由于 UINavigationController 是 UIViewController 的子类,您的其余代码应该可以正常工作。

View Controller 的顺序将与它们在从 viewControllerList 返回的数组中的顺序相同

关于ios - 内部带有导航 Controller 的 PageViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46085348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com