ios - 更改 UIPageViewController 中显示的初始 View Controller

标签 ios swift uiviewcontroller uipageviewcontroller

几个月前我刚刚开始使用 swift 编程,目前正在做一些随机项目,以帮助我更好地学习这门语言。目前,我正在尝试使用 UIPageViewController 创建一个类似于 Snapchat 的 UI。水平滚动正在工作,我可以正确浏览页面,但我想更改显示的初始 View Controller 。在下面的代码中,我有三个 ViewController(vc1、vc2、vc3)。我想让它们保持相同的顺序,但首先显示 vc2,所以基本上将它放在其他两个的中间。感谢所有帮助。谢谢!

import UIKit
import FirebaseDatabase
import FirebaseAuth
import Firebase

class RootPageViewController: UIPageViewController, UIPageViewControllerDataSource {

    let Cards = CardsVC()

    lazy var viewControllerList:[UIViewController] = {

        let sb = UIStoryboard(name: "Main", bundle: nil)

        let vc1 = sb.instantiateViewController(withIdentifier: "MessagesVC")
        let vc2 = sb.instantiateViewController(withIdentifier: "CardsVC")
        let vc3 = sb.instantiateViewController(withIdentifier: "ProfileVC")

        return[vc1, vc2, vc3]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        //if Auth.auth().currentUser?.uid == nil{
            //logout()
        //}else{
        self.dataSource = self

        if let firstViewController = viewControllerList.first{
            self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
        }
    //}
    }

    func logout(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let verifyPhoneVC = storyboard.instantiateViewController(withIdentifier: "enterPhoneNumber")
        present(verifyPhoneVC, animated: true, completion: nil)

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

        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: UIViewController) -> UIViewController? {

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

}

最佳答案

你已经准备好了完整的代码,你需要做的就是从 viewDidLoad 中的 viewControllerList 传递第二个ViewController,仅此而已

所以替换

if let firstViewController = viewControllerList.first{
            self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
   }

let secondViewController = viewControllerList[1]
    self.setViewControllers([secondViewController], direction: .forward, animated: true, completion: nil)

希望这有帮助

关于ios - 更改 UIPageViewController 中显示的初始 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48056216/

相关文章:

ios - URL矩阵参数和IOS

ios - 旋转后 UIWebView 内容未调整到新框架

ios - "cannot increment endIndex"- 由于 UITextView 中的表情符号字符而出错

ios5 - Storyboard崩溃 - 符合编码的关键场景ViewController

ios - indexPath 不可变? swift

ios - 如何为每条线段添加颜色?

ios - 通过不同 View Controller 使用 Realm 时出现 RLMException

ios - 在 viewDidLoad 中获取位置

ios - iOS 中的 UIViewController 和 UIView 生命周期

ios - .observe firebase 方法 swift4 后代码未执行