UIPageViewController with child ViewControllers

问题描述:

我是iOS新手,目前有3个视图,并希望使用滑动手势在它们之间导航。滑动工作。红色的bg视图会首先按我的需要加载,并且滑动效果很好,但是点按“下一步”按钮并不会执行任何操作。任何人都可以给我一个提示吗?我处理这个错误,但不能似乎找到谷歌UIPageViewController with child ViewControllers

project

在我的项目的任何帮助,我有处理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. 
    } 
} 

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

+0

没有从你的代码中得到任何暗示的问题,你可以请你与我分享你的项目([email protected])。我会看看,并会更新你 – arunjos007

您没有分配任何东西给pvc变量IdCardViewController。因此,当您实例化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卡”视图控制器分配正确的类。为此,请在故事板中选择“Id Card”视图控制器的对象,并将其类别更改为“Identity Inspector”中的IdCardViewController。 希望这有助于!

+0

请你详细说明当IdCardViewController实例化时分配'MemberCardViewController'?我不知道在哪里写什么 – JapanGuy

+0

@JapanGuy我编辑了我的答案,检查它是否对你有帮助。 –

+0

谢谢你的回答!这很棒! – JapanGuy