Swift 和 2 个视图之间的页面视图控制器
Swift and Page view controller between 2 views
在我的 swift iOS 应用程序中,我会创建一个包含两个视图的故事板。我想使用页面视图控制器元素,因此,只需向左/向右滑动一次,用户就可以更改实际视图。我该怎么做?
重要!我已经多次在网上搜索教程。我只找到了允许在同一图像视图中更改图像的模式。我不想在同一视图中更改同一图像中的图像;我想改变整个视图。我附上一张图片,以便更好地解释。
提前致谢]1
这解释了如何使用故事板创建分页视图控制器:
- 将一个 UIPageViewController 拖到故事板中并将其标记为初始视图控制器。
- 然后创建一个新的
UIPageViewController
子类 - 将其命名为 TutorialPageViewController
并将其分配给您刚刚拖入情节提要中的对象。
- 现在将两个新的 UIViewController 拖入故事板,create/assign 为每个拖入一个子类,就像您通常所做的那样。
- 给这两个视图控制器中的每一个一个
Storyboard ID
例如 RedViewController
& GreenViewController
.
- 现在将此代码添加到您的
TutorialPageViewController
中,它会创建
并在您滑动时显示正确的视图控制器:
教程页面视图控制器:
class TutorialPageViewController: UIPageViewController, UIPageViewControllerDataSource {
private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("RedViewController"),
self.newColoredViewController("GreenViewController")]
}()
private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewControllerWithIdentifier("\(color)ViewController")
}
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .Forward,
animated: true,
completion: nil)
}
}
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 nil
}
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 nil
}
guard orderedViewControllersCount > nextIndex else {
return nil
}
return orderedViewControllers[nextIndex]
}
}
有关详细信息和相关教程,请参阅文章。
https://spin.atomicobject.com/2015/12/23/swift-uipageviewcontroller-tutorial/
更新:页面点数
阅读第 2 部分文章的第 7 点,该文章展示了如何添加 UIPageControl 并更改滑动时的点:
https://spin.atomicobject.com/2016/02/11/move-uipageviewcontroller-dots/
@IBOutlet weak var pageControl: UIPageControl!
func tutorialPageViewController(tutorialPageViewController: TutorialPageViewController,
didUpdatePageCount count: Int) {
pageControl.numberOfPages = count
}
func tutorialPageViewController(tutorialPageViewController: TutorialPageViewController,
didUpdatePageIndex index: Int) {
pageControl.currentPage = index
}
在我的 swift iOS 应用程序中,我会创建一个包含两个视图的故事板。我想使用页面视图控制器元素,因此,只需向左/向右滑动一次,用户就可以更改实际视图。我该怎么做?
重要!我已经多次在网上搜索教程。我只找到了允许在同一图像视图中更改图像的模式。我不想在同一视图中更改同一图像中的图像;我想改变整个视图。我附上一张图片,以便更好地解释。
提前致谢
这解释了如何使用故事板创建分页视图控制器:
- 将一个 UIPageViewController 拖到故事板中并将其标记为初始视图控制器。
- 然后创建一个新的
UIPageViewController
子类 - 将其命名为TutorialPageViewController
并将其分配给您刚刚拖入情节提要中的对象。 - 现在将两个新的 UIViewController 拖入故事板,create/assign 为每个拖入一个子类,就像您通常所做的那样。
- 给这两个视图控制器中的每一个一个
Storyboard ID
例如RedViewController
&GreenViewController
. - 现在将此代码添加到您的
TutorialPageViewController
中,它会创建 并在您滑动时显示正确的视图控制器:
教程页面视图控制器:
class TutorialPageViewController: UIPageViewController, UIPageViewControllerDataSource {
private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("RedViewController"),
self.newColoredViewController("GreenViewController")]
}()
private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewControllerWithIdentifier("\(color)ViewController")
}
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .Forward,
animated: true,
completion: nil)
}
}
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 nil
}
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 nil
}
guard orderedViewControllersCount > nextIndex else {
return nil
}
return orderedViewControllers[nextIndex]
}
}
有关详细信息和相关教程,请参阅文章。
https://spin.atomicobject.com/2015/12/23/swift-uipageviewcontroller-tutorial/
更新:页面点数
阅读第 2 部分文章的第 7 点,该文章展示了如何添加 UIPageControl 并更改滑动时的点:
https://spin.atomicobject.com/2016/02/11/move-uipageviewcontroller-dots/
@IBOutlet weak var pageControl: UIPageControl!
func tutorialPageViewController(tutorialPageViewController: TutorialPageViewController,
didUpdatePageCount count: Int) {
pageControl.numberOfPages = count
}
func tutorialPageViewController(tutorialPageViewController: TutorialPageViewController,
didUpdatePageIndex index: Int) {
pageControl.currentPage = index
}