2017-12-22 6 views
0

私は物理療法クリニックの新しい患者用のオンボーディングアプリを作成しています。新しい患者はUIPageViewController内の各ビューコントローラで質問に回答し、ボタンをタップして次の質問に進みます。ボタンを使用してUIPageViewController内を前後にナビゲートするにはどうすればよいですか?

私はチュートリアルに続き、UIPageViewControllerPageVCと3つのView Controllerを設定しました。 PageVCは現在スワイプでページを変更していますが、PageVCのサブビューである2つのボタンを使用して、ビューコントローラを前後にナビゲートすることができます。これをどのように達成するのですか?

UIPageViewControllerを好きでもう少し理解したいです。この同じタスクを達成するためにUIPageViewControllerを使用する以外に、より効果的な方法がある場合、私はそれを考慮してうれしいです。

class PageVC: UIPageViewController, UIPageViewControllerDataSource { 

     private(set) lazy var orderedViewControllers: [UIViewController] = { 
      return [self.VCInstance(name: "BodyChart"), 
        self.VCInstance(name: "Symptoms"), 
        self.VCInstance(name: "HadSurgery")] 
     }() 

     private func VCInstance(name: String) -> UIViewController { 
      return UIStoryboard(name: "Main", bundle: nil) . 
       instantiateViewController(withIdentifier: name) 
     } 

     func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
      guard let viewControllerIndex = orderedViewControllers.index(of: 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, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
      guard let viewControllerIndex = orderedViewControllers.index(of: 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] 
     } 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      dataSource = self 

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

} 
+2

重複している可能性があります。[リンク](https://stackoverflow.com/questions/30489920/ios-swift-uipageviewcontroller-turning-page-programatically) –

答えて

1

私はあなたが探しているものだと思いhere.である。しかし、これは別の方法です。

UIPageViewControllerには、インスタンスメソッドの遷移があります。下のスニペットは、最初のページから2ページ目の子ビューコントローラーに移動します。

pageViewController.transition(from: pageViewController.viewControllers[0], to: pageViewController.viewControllers[1], duration: 0.3, options: UIViewAnimationOptions.curveEaseInOut, animations: nil, completion: nil) 

PageVCは現在、スワイプでページを変更しますが、私は後方に移動し、二つのボタン

その後、horizontal scrolling on PageVC's scrollviewを無効にするか、ページのコンテンツにあなたのボタンを追加を使用してビューコントローラを介して転送することができるようにしたいですビューのユーザーの操作を気楽に無効にします。

関連する問題