gpt4 book ai didi

ios - 在 Swift 中将 UIPageViewController 的逻辑实现为 UIViewController 的 subview

转载 作者:可可西里 更新时间:2023-11-01 00:51:58 25 4
gpt4 key购买 nike

我必须将 UIPageViewController 实现为我的 UIViewController 的 subview 。 UIPageViewController 内部有一些逻辑和其他 ViewController。我的问题是如何连接下面这两段代码。

所以这是我的主要 UIViewController 代码:

class MyMainViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

和我的 UIPageViewController 代码,它实现了他包含的 ViewController 之间的无限循环(我复制了整个代码,可能没有必要):

class TutorialPageViewController: UIPageViewController {

private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("Green"),
self.newColoredViewController("Red"),
self.newColoredViewController("Blue")]
}()

override func viewDidLoad() {
super.viewDidLoad()

dataSource = self

if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .Forward,
animated: true,
completion: nil)
}
}

private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewControllerWithIdentifier("\(color)ViewController")
}

}

extension TutorialPageViewController: UIPageViewControllerDataSource {

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
return nil
}

let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return orderedViewControllers.last
}
guard orderedViewControllers.count > previousIndex else {
return nil
}
return orderedViewControllers[previousIndex]
}

func pageViewController(pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
return nil
}

let nextIndex = viewControllerIndex + 1
let orderedViewControllersCount = orderedViewControllers.count

guard orderedViewControllersCount != nextIndex else {
return orderedViewControllers.first
}

guard orderedViewControllersCount > nextIndex else {
return nil
}

return orderedViewControllers[nextIndex]
}

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return orderedViewControllers.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first,
firstViewControllerIndex = orderedViewControllers.indexOf(firstViewController) else {
return 0
}

return firstViewControllerIndex
}

}

最佳答案

在布局 MyMainViewControllerTutorialPageViewController 的 Storyboard中,您需要向 MyMainViewController 添加容器 View ,然后使用 Embed 继续嵌入 TutorialPageViewController

当显示 MyMainViewController 时,它现在也会自动插入您的教程 View 。

enter image description here enter image description here

关于ios - 在 Swift 中将 UIPageViewController 的逻辑实现为 UIViewController 的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601005/

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