PageView 컨트롤러가있는 간단한 스토리 보드를 만들었습니다.PageViewController의 DataSource가 올바르게 작동하지 않는 이유는 무엇입니까?
두 개의 다른보기 컨트롤러 사이를 뒤집습니다.
내 PageView Controller는 사용자 지정 클래스 TutorialPageViewController
입니다. 또한 맞춤 DataSource 클래스를 만들었습니다.
DataSource 클래스에서 스크롤하려고하면 pageViewController
메서드가 호출 될 것으로 예상됩니다. 그러나 이것은 그렇지 않습니다. 나는 두 가지 방법 모두에서 break point를 가지고 있으며 결코 호출되지 않는다.
첫 번째보기 컨트롤러 인 "첫 번째 페이지"는 올바르게 표시되지만 스크롤하려고하면 메서드가 호출되지 않으므로 아직 사용할 수 없습니다 (따라서 현재는 nil을 반환합니다).
내보기 컨트롤러의 데이터 소스를 self
으로 설정하고 거기에 메서드를 넣으면 제대로 호출됩니다. 그러나 더 나은 코드 관리를 위해 메서드를 별도의 클래스로 옮기고 싶습니다. 그럼 왜 작동하지 않습니까? 나는뿐만 아니라 UIPageViewControllerDelegate
로 UIScrollViewDelegate
을로 내 데이터 소스 클래스를 설정하고 뷰 컨트롤러의 delegate
는
- 을 시도했습니다
class TutorialPageViewController : UIPageViewController {
override func viewDidLoad() {
reset()
}
func reset() {
let dataSource = TutorialPageDataSource(storyBoard: storyboard!)
let content = dataSource.firstContentViewController
self.dataSource = dataSource
self.setViewControllers([content], direction: .forward, animated: true, completion: nil)
}
}
class TutorialPageDataSource : NSObject, UIPageViewControllerDataSource {
private var _storyboard: UIStoryboard
var firstContentViewController: UIViewController
var secondContentViewController: UIViewController
init(storyBoard: UIStoryboard) {
_storyboard = storyBoard
firstContentViewController = _storyboard.instantiateViewController(withIdentifier: "FirstContentViewController")
secondContentViewController = _storyboard.instantiateViewController(withIdentifier: "FirstContentViewController")
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// break point here never reached
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
// break point here never reached
return nil
}
}
감사합니다. 나는 그 것을 미래에 기억할 것이다 :) –