페이지 ViewController(:viewController After) 호출 및 호출 정보(UPIPageViewController)

전제 조건

  • Swift 3
  • ViewController는 일반적으로 1장
  • 만 표시됩니다.

    날과 씨

  • public 속성에 설정된 숫자만 표시하는 ViewController
  • 무제한 호출을 위해 UIPage ViewController 사용
  • 지우기를 통해 위 ViewController의 숫자를 카운트다운
  • 하려고 합니다.

    tl;dr

  • PageViewController가 표시되는 ViewController의 앞뒤로 최대한 ViewController를 생성하여 대기시킵니다
  • .
  • 초기화 후 처음 호출을 시작했을 때pageViewController(_: viewControllerBefore:)pageViewController(_: viewControllerAfter:)가 한 번에 호출되었음
  • 호출이 완료되면 호출 방향에 따라 pageViewController(_: viewControllerBefore:)pageViewController(_: viewControllerAfter:)
  • 매개 변수의viewController에 따라 적당한 값을 결정합시다
  • 예상대로 이동하지 않는 코드

    class ViewController: UIViewController {
        public var number: Int = 0
        @IBOutlet weak var simpleLabel: UILabel!
    
        override func viewWillAppear(_ animated: Bool) {
            simpleLabel.text = number.description
        }
    }
    class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
        var number: Int = 0
        override func viewDidLoad() {
            super.viewDidLoad()
            self.dataSource = self
    
            // 初期表示するViewControllerをセットする
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            vc.number = self.number
            self.setViewControllers([vc], direction: .forward, animated: true)
        }
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            // 後方のViewControllerを生成するため、カウントダウンしたい
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            self.number -=1
            vc.number = self.number
            return vc
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            // 前方のViewControllerを生成するため、カウントアップしたい
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            self.number +=1
            vc.number = self.number
            return vc
        }
    
    }
    

    기대하는 대로 이동하는 코드입니다.

    class ViewController: UIViewController {
        public var number: Int = 0
        @IBOutlet weak var simpleLabel: UILabel!
    
        override func viewWillAppear(_ animated: Bool) {
            simpleLabel.text = number.description
        }
    }
    class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
        override func viewDidLoad() {
            super.viewDidLoad()
            self.dataSource = self
    
            // 初期表示するViewControllerをセットする
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            vc.number = 0
            self.setViewControllers([vc], direction: .forward, animated: true)
        }
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            // 後方のViewControllerを生成するため、カウントダウンしたい
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            vc.number = (viewController as! ViewController).number - 1
            return vc
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            // 前方のViewControllerを生成するため、カウントアップしたい
            let vc:ViewController = // コード生成したりStoryboardから取ったり
            vc.number = (viewController as! ViewController).number + 1
            return vc
        }
    
    }
    

    이 방법을 호출할 시기를 정리하다


    PageViewController 초기화에서 붙여넣기 완료에 이르는 그림



    이것은 PageViewController.viewDidLoad()가 완성된 후 이어지는 그림이다.
    연두색은 위쪽ViewController, 바깥쪽은 테두리PageViewController입니다.

    After 방향의 스왑 이벤트가 발생했습니다.

    호출을 시작하지만 표시된 ViewController가 존재하지 않기 때문에 호출pageViewController(_: viewControllerAfter:)을 실행하여 이전 ViewController를 생성합니다.

    또한 Before 방향의 ViewController도 존재하지 않기 때문에pageViewController(_: viewControllerBefore:) 후방의 ViewController도 생길 수 있다.

    붙여넣는 중...

    페이지 완료.다음 호출 처리를 준비하려면 호출pageViewController(_: viewControllerAfter:)을 실행하여 이전 ViewController를 생성합니다.

    문제 코드에서 무슨 일이 일어났는지



    이것은 문제 코드를 반영한 그림이다.원형 원소 표시PageViewController.number.

    After 방향의 스위칭 이벤트가 발생하여 이전 ViewController가 생성되었습니다.pageViewController(_: viewControllerAfter:)PageViewController.number를 계산할 것이다.

    또한 후면 ViewController가 생성됩니다.pageViewController(_: viewControllerBefore:)PageViewController.number를 카운트다운한다.

    붙여넣는 중...

    페이지 완료.다음 호출 처리를 위해 이전 ViewController를 생성합니다.pageViewController(_: viewControllerAfter:)PageViewController.number를 계산할 것이다.

    총결산

  • pageViewController(_: viewControllerBefore:)pageViewController(_: viewControllerAfter:)에서 생성할 ViewController의 앞뒤 ViewController
  • 를 받을 수 있습니다.
  • 따라서 앞뒤 ViewController의 값을 고려하십시오
  • .

    좋은 웹페이지 즐겨찾기