gpt4 book ai didi

ios - UIPageViewController 从子 UIViewController 上的控件过渡

转载 作者:行者123 更新时间:2023-11-28 08:59:46 26 4
gpt4 key购买 nike

我有一个 PageViewController,它有两个 UIViewController,它们的设置如下:

ViewController.swift

override func viewDidLoad() {
super.viewDidLoad()

self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
self.pageViewController.dataSource = self
self.pageViewController.delegate = self

let startingViewController = self.viewControllerAtIndex(self.index)
let viewControllers: NSArray = [startingViewController]
self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)

self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-10)
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)

}

在其中一个 subview Controller 中,我有一个按钮应该转换到 PageViewController 中的特定索引:

    @IBAction func createClick(sender: UIButton, forEvent event: UIEvent) {

let pageViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController

let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("NextViewController") as! UIViewController
let viewControllers: NSArray = [secondViewController]
pageViewController.self.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)

}

没有错误,但页面没有转换。我认为委托(delegate)有问题,但我不确定如何解决。

最佳答案

问题是您实际上并没有在您的应用程序实际使用的 UIPageViewController 上设置 viewControllers 属性 - 您正在实例化一个全新的 UIPageViewController 来自与屏幕上显示的任何 Controller 无关的 Storyboard。

一个解决方案是在每个 subview Controller 中创建对 UIPageViewController 的引用,如下所示:

weak var pageViewController: UIPageViewController?

在您的 dataSource 中,当您实现“之后”和“之前”方法时,即:pageViewController:viewControllerBeforeViewController:pageViewController:viewControllerAfterViewController: 您需要创建新的 subview Controller ,然后将 pageViewController 属性设置为对“父”UIPageViewController 的引用。

然后,当您的@IBAction 方法被调用时,您可以像这样在pageViewController 上调用该方法:

let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("NextViewController") as! UIViewController
let viewControllers: NSArray = [secondViewController]
pageViewController?.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)

类似的东西应该可以工作。

关于ios - UIPageViewController 从子 UIViewController 上的控件过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com