【问题标题】:How to change UIPageViewController VCs by UIButton Swift 4.0?如何通过 UIButton Swift 4.0 更改 UIPageViewController VC?
【发布时间】:2018-07-25 00:25:27
【问题描述】:

我有带有 3 个 UIViewController(“FirstVC”、“SecondVC”、“ThirdVC”)的 UIPageViewController。 ViewControllers 通过滚动来改变,但我需要通过点击 UIButtons 来改变它。

我该怎么做?

也许有一些函数,VC 将通过 StoryboardID 设置?

感谢所有回答!

【问题讨论】:

  • 您是否在“父”VC 中嵌入了UIPageViewController,并且您希望下一个/上一个按钮以编程方式更改当前页面?或者您只是使用UIPageViewController,并且您希望“每个页面中的”按钮进行更改?
  • 是的,你明白我的想法。我的 UIPageVC 像容器一样嵌入在 ViewController 中,在它下面有一个带有 UIPageVC VC 名称的按钮

标签: ios swift uiviewcontroller uibutton uipageviewcontroller


【解决方案1】:

您可以使用以下方法轻松地以编程方式浏览UIPageViewController 的页面:

setViewControllers([targetPage], direction: .forward, animated: true, completion: nil)

如果你有一个UIPageViewController嵌入在一个ContainerView中,并且你希望“根”视图中的按钮来控制页面视图控制器,基本过程是:

  • 向您的页面视图控制器类添加导航方法(功能)
  • 在加载时保存对页面视图控制器的引用
  • 您的按钮使用该引用调用导航功能

当您的“根”视图控制器加载并实例化嵌入在您的 ContainerView 中的视图控制器时,它会调用 prepare(for segue:...) - 这是您获取参考的地方。

在 Storyboard 中,您将视图控制器嵌入到 ContainerView 中,您将看到一个标准的“segue”连接。在 Attributes Inspector 中,为该 segue 指定一个标识符,例如“PageControllerEmbedSegue”。

在您的根控制器类中,添加一个类级变量:

var myPageVC: BasicPageViewController?

prepare():

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    // get a reference to the embedded PageViewController on load
    if let vc = segue.destination as? BasicPageViewController,
        segue.identifier == "PageControllerEmbedSegue" {
        self.myPageVC = vc
    }

}

现在,您可以调用函数/获取嵌入式视图控制器的属性。

我在 GitHub 上有一个完整的示例:https://github.com/DonMag/EmbeddedPageView

【讨论】:

    【解决方案2】:

    有几种方法。您可以在 Storyboard 文件中添加一个 segue 并调用

    performSegue(withIdentifier: "toResponseTime", sender: self)

    否则你可以做类似的事情。

        let controller = self.storyboard!.instantiateViewController(withIdentifier: "AngelDetailViewController") as! AngelDetailViewController
    
        self.navigationController!.pushViewController(controller, animated: true)
    

    【讨论】:

    • 不,这是为了简单地推送到视图控制器。 Page View Controller 有一些提供浏览嵌入式控制器的委托方法。
    • 那么以及如何通过委托方法做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 2015-01-06
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多