带有子 ViewController 的 UIPageViewController

UIPageViewController with child ViewControllers

我是 iOS 的新手,目前有 3 个视图,想使用滑动手势在它们之间导航。刷卡工作。红色 bg 视图按照我的意愿首先加载,滑动效果很好,但是点击“下一步”按钮没有任何作用。谁能给我一个提示?我正在接近这个错误,但似乎无法在 google

上找到任何帮助

在我的项目中,我有一个处理 UIPageViewController 的 MemberCardViewController:

class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    lazy var viewArray: [UIViewController] = {

        return [self.ViewControllerInstance(name: "CalendarView"),
                self.ViewControllerInstance(name: "IdCardView"),
                self.ViewControllerInstance(name: "MemberInfoView")]
    }()

    private func ViewControllerInstance(name: String) -> UIViewController {
        return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        self.delegate = self
        loadViewController(viewPosition: 1)
    }

    func loadViewController(viewPosition: Int) {
        if let viewController = viewArray.get(at: viewPosition) {
            setViewControllers([viewController], direction: .forward, animated: true, completion: nil)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
...

现在,我还创建了一个与身份证(红色背景视图)对应的 IdCardViewController

class IdCardViewController: UIViewController {

    var pvc = MemberCardViewController()

    @IBAction func loadRight(_ sender: Any) {
        pvc.loadViewController(viewPosition: 2)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

我现在面临的问题是,当在 Id Card 中单击“下一步”按钮时,我想加载“会员信息”视图,但现在单击它时没有任何反应。但是,我在 MemberCardViewController 的 loadViewController() 方法中设置了断点,可以看到当单击按钮时应用程序正在到达它,但是视图不会更改为 Member Info

您没有为 IdCardViewControllerpvc 变量分配任何内容。因此,当您实例化 IdCardViewController 的实例时,您应该将 MemberCardViewController 对象分配给 pvc 变量。祝你好运!

编辑

改变

private func ViewControllerInstance(name: String) -> UIViewController {
        return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
    }

private func ViewControllerInstance(name: String) -> UIViewController {
        if name == "IdCardView"
        {
            if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController {
                vc.pvc = self
                return vc
            }

        }
        return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name)
    }

这里所做的是,在实例化 IdCardViewController 的实例之后,MemberCardViewController 的对象(在本例中为 self)被分配给 pvc 多变的。此外,要使此代码正常工作,您必须为情节提要中的 "Id Card" 视图控制器分配权限 class。为此,select "Id Card" 在故事板中查看控制器的对象,并将其 class 更改为 "Identity Inspector" 中的 IdCardViewController。 希望这对您有所帮助!