Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 内部带有导航控制器的PageViewController_Ios_Swift_Uipageviewcontroller - Fatal编程技术网

Ios 内部带有导航控制器的PageViewController

Ios 内部带有导航控制器的PageViewController,ios,swift,uipageviewcontroller,Ios,Swift,Uipageviewcontroller,我有一个pageviewcontroller,我想在其中包含多个导航控制器。我保留错误类型HomeViewController不符合UIPageViewController数据源 import UIKit import Firebase import FirebaseAuth class HomeViewController: UIPageViewController, UIPageViewControllerDataSource { let dropDownLauncher = Dr

我有一个pageviewcontroller,我想在其中包含多个导航控制器。我保留错误类型HomeViewController不符合UIPageViewController数据源

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?