两个视图之间的Swift和Page视图控制器

时间:2016-04-01 15:56:43

标签: ios swift view swipe

在我的swift iOS应用程序中,我将创建一个包含两个视图的故事板。我想使用页面视图控制器元素,因此,通过左/右滑动,用户可以更改实际视图。我怎么能这样做?

重要!我已经多次搜索网页上的教程。我只找到了允许在同一图像视图中更改图像的模式。我不想在同一视图中更改同一图像中的图像;我想改变整个视图。我附上一张图片,以便更好地解释。

提前感谢![Schema] 1

1 个答案:

答案 0 :(得分:3)

这解释了如何使用storyboard创建分页视图控制器:

  1. 将UIPageViewController拖到故事板中,并将其标记为初始视图控制器。
  2. 然后创建一个新的UIPageViewController子类 - 比如称之为TutorialPageViewController并将其分配给刚刚拖入故事板的对象。
  3. 现在将两个新的UIViewController拖入故事板并为每个创建/分配一个子类,就像你通常那样。
  4. 为这两个视图控制器中的每一个提供一个Storyboard ID,例如RedViewController& GreenViewController
  5. 现在将此代码添加到您创建的TutorialPageViewController中 并在滑动时显示正确的视图控制器:
  6. 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/

    更新:Page Dots

    从第7部分的第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
    }