代码之家  ›  专栏  ›  技术社区  ›  user3762780

带有uiPageViewController的SetViewController不工作

  •  3
  • user3762780  · 技术社区  · 10 年前

    我正在制作一个应用程序,它使用UIPageViewController在页面之间导航。除了当我试图手动更改使用setViewControllers显示的视图控制器时,它不显示,其他一切都正常。

    我知道它正在创建视图控制器,因为它打印到日志,但屏幕上显示的控制器没有更改。我用于uiviewcontroller子类的索引(构成每个视图控制器)也设置正确。

    按下视图控制器时调用该功能。

    以下是更改控制器的代码:

        func changeVC(VC: UIViewController) {
            setViewControllers([VC], direction: .Forward, animated: true, completion: nil)
        }
    

    函数调用:

        Let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("contentView") as! ViewController
        Controller.index = row
        PageViewController().changeVC(controller)
    

    它位于表视图的didSelectRowAtIndexPath方法内。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Sandeep Bhandari    10 年前

    Cjay绝对正确,

    让我更详细地解释一下,以帮助您理解您正在犯的错误。

    每次你打电话 PageViewController().changeVC(controller) 将创建PageViewController的新实例,并对刚才创建的新实例调用changeVC。虽然您通过脚本设置ViewController的索引来实例化ViewController的代码,调用changeVC并设置PageViewController的ViewController,所有执行操作都不会在屏幕上看到任何效果,因为您更改了刚刚安装的PageViewController中的ViewController(既没有可见的有效帧(0,0,0.0),也没有加载(没有添加到ViewController的视图中):)

    相反,您应该在已经加载的PageViewController上执行完全相同的操作:)

    根据您的注释,您正在从情节提要加载PageViewController,为此创建一个IBOutlet,让我们将其称为myPageViewController:),因此当您想更改它的ViewController时,只需说,

    let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("contentView") as! ViewController
    controller.index = row
    self.myPageViewController.changeVC(controller)
    

    希望这能有所帮助:)