페이지 ViewController(:viewController After) 호출 및 호출 정보(UPIPageViewController)
14800 단어 SwiftUIPageViewControlleriOS
전제 조건
날과 씨
tl;dr
pageViewController(_: viewControllerBefore:)
와 pageViewController(_: viewControllerAfter:)
가 한 번에 호출되었음pageViewController(_: viewControllerBefore:)
및 pageViewController(_: viewControllerAfter:)
예상대로 이동하지 않는 코드
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의 앞뒤 ViewControllerReference
이 문제에 관하여(페이지 ViewController(:viewController After) 호출 및 호출 정보(UPIPageViewController)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yajamon/items/e1754e7fc847b595c26a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)