【问题标题】:UIPage ViewController, i want to navigate the other second viewcontroller from non uipage viewcontrollerUIPage ViewController,我想从非 uipage viewcontroller 导航另一个第二个 viewcontroller
【发布时间】:2017-08-02 07:01:58
【问题描述】:

我需要 UIpageViewcontroller 的代码,它将像下面的图像 MVC 一样工作。

PageViewController Flow

编辑:

当我点击“Other ViewController”的下一个按钮时,它会调用 UIPageViewcontroller 的 ViewController 2。 具体流程如上图所示。

【问题讨论】:

    标签: ios swift model-view-controller uipageviewcontroller


    【解决方案1】:

    好的,这是一种方法

    首先你需要在故事板中创建一个 UIPageViewController 并将类设置为与此代码相同

    在一个新的 swift 文件中复制并粘贴它

    class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
    //make sure the storyboard PageviewControllers class is set to this class or it wont work
    
    lazy var VCArray: [UIViewController] = {
        //here is where your viewController pages go. in storyboard create multiple viewControllers and give them a storyboard ID here is where the storyboard IDs will be put in
        return [self.VCInstance(name: "firstVC"),
                self.VCInstance(name: "secondVC"),
                self.VCInstance(name: "thirdVC")]
    }()
    
    private func VCInstance(name: String) -> UIViewController {
            return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.delegate = self
        self.dataSource = self
    
        if let firstVC = VCArray.first {
            setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
        }
    
    
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    
        for view in self.view.subviews {
            if view is UIScrollView {
                view.frame = UIScreen.main.bounds
            } else if view is UIPageControl {
                view.backgroundColor = UIColor.clear
            }
        }
    }
    
    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = VCArray.index(of: viewController) else {
            return nil
        }
    
        let previousIndex = viewControllerIndex - 1
    
        guard previousIndex >= 0 else {
            return VCArray.last
        }
    
        guard VCArray.count > previousIndex else {
            return nil
        }
        return VCArray[previousIndex]
    }
    
    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = VCArray.index(of: viewController) else {
            return nil
        }
    
        let nextIndex = viewControllerIndex + 1
    
        guard nextIndex < VCArray.count else {
            return VCArray.first
        }
    
        guard VCArray.count > nextIndex else {
            return nil
        }
        return VCArray[nextIndex]
    }
    //this is optional for the page counter at the bottom
    public func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return VCArray.count
    }
    //this is optional for the page counter at the bottom
    public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = VCArray.index(of: firstViewController) else {
            return 0
        }
        return firstViewControllerIndex
    }
    

    }

    解释-

    上面的代码是非常可定制的,您可以更改底部是否有页面计数器或显示多少页面,通过使用它将多个故事板视图控制器转换为单页视图控制器,并且因为页面是单独的故事板viewControllers 你可以在页面上放任何你想要的东西......如果你仍然感到困惑,请查看YouTube上的这个视频

    【讨论】:

    • 导航到不同的视图控制器运行良好,但我需要,当我们在“其他视图控制器”中时,它不会出现在 UIPageViewController(如 ViewController 1、2、3)的成员中,如果我们点击next 按钮,视图控制器将调用,pageviewcontroller child(ViewController 2)。只需在我的问题帖中查看上面的图片即可。
    • 你需要做的是使用上面的代码制作两个 pageViewControllers,如果有意义的话,在第一个 pageViewController 的第二页上放置一个导航到第二个 pageViewController 第一页的 UIButton
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2015-11-23
    相关资源
    最近更新 更多