UIPage ViewController,我想从非 uipage viewcontroller 导航另一秒 viewcontroller
UIPage ViewController, i want to navigate the other second viewcontroller from non uipage viewcontroller
我需要 UIpageViewcontroller 的代码,它将像下面的 Image MVC 一样工作。
PageViewController Flow
编辑:
当我点击 "Other ViewController" 的下一个按钮时,它会调用 UIPageViewcontroller 的 ViewController 2。
具体流程如上图所示。
好的,这是一种方法
首先您需要在故事板中创建一个 UIPageViewController 并将 class 设置为与此代码相同的
在新的 swift 文件中复制并粘贴这个
class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
//make sure the storyboard PageviewControllers class is set to this class or it wont work
lazy var VCArray: [UIViewController] = {
//here is where your viewController pages go. in storyboard create multiple viewControllers and give them a storyboard ID here is where the storyboard IDs will be put in
return [self.VCInstance(name: "firstVC"),
self.VCInstance(name: "secondVC"),
self.VCInstance(name: "thirdVC")]
}()
private func VCInstance(name: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)
}
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
if let firstVC = VCArray.first {
setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for view in self.view.subviews {
if view is UIScrollView {
view.frame = UIScreen.main.bounds
} else if view is UIPageControl {
view.backgroundColor = UIColor.clear
}
}
}
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = VCArray.index(of: viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return VCArray.last
}
guard VCArray.count > previousIndex else {
return nil
}
return VCArray[previousIndex]
}
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = VCArray.index(of: viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
guard nextIndex < VCArray.count else {
return VCArray.first
}
guard VCArray.count > nextIndex else {
return nil
}
return VCArray[nextIndex]
}
//this is optional for the page counter at the bottom
public func presentationCount(for pageViewController: UIPageViewController) -> Int {
return VCArray.count
}
//this is optional for the page counter at the bottom
public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = VCArray.index(of: firstViewController) else {
return 0
}
return firstViewControllerIndex
}
}
解释-
上面的代码是非常可定制的,您可以更改底部是否有页面计数器或显示多少页,使用它可以将多个故事板 viewController 变成单页 viewController 并且因为页面是单独的故事板 viewControllers 你可以在页面上放任何你想要的东西......如果你仍然感到困惑,请查看 YouTube
上的这个视频
我需要 UIpageViewcontroller 的代码,它将像下面的 Image MVC 一样工作。
PageViewController Flow
编辑:
当我点击 "Other ViewController" 的下一个按钮时,它会调用 UIPageViewcontroller 的 ViewController 2。 具体流程如上图所示。
好的,这是一种方法
首先您需要在故事板中创建一个 UIPageViewController 并将 class 设置为与此代码相同的
在新的 swift 文件中复制并粘贴这个
class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
//make sure the storyboard PageviewControllers class is set to this class or it wont work
lazy var VCArray: [UIViewController] = {
//here is where your viewController pages go. in storyboard create multiple viewControllers and give them a storyboard ID here is where the storyboard IDs will be put in
return [self.VCInstance(name: "firstVC"),
self.VCInstance(name: "secondVC"),
self.VCInstance(name: "thirdVC")]
}()
private func VCInstance(name: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)
}
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
if let firstVC = VCArray.first {
setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for view in self.view.subviews {
if view is UIScrollView {
view.frame = UIScreen.main.bounds
} else if view is UIPageControl {
view.backgroundColor = UIColor.clear
}
}
}
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = VCArray.index(of: viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return VCArray.last
}
guard VCArray.count > previousIndex else {
return nil
}
return VCArray[previousIndex]
}
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = VCArray.index(of: viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
guard nextIndex < VCArray.count else {
return VCArray.first
}
guard VCArray.count > nextIndex else {
return nil
}
return VCArray[nextIndex]
}
//this is optional for the page counter at the bottom
public func presentationCount(for pageViewController: UIPageViewController) -> Int {
return VCArray.count
}
//this is optional for the page counter at the bottom
public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = VCArray.index(of: firstViewController) else {
return 0
}
return firstViewControllerIndex
}
}
解释-
上面的代码是非常可定制的,您可以更改底部是否有页面计数器或显示多少页,使用它可以将多个故事板 viewController 变成单页 viewController 并且因为页面是单独的故事板 viewControllers 你可以在页面上放任何你想要的东西......如果你仍然感到困惑,请查看 YouTube
上的这个视频