5

내 응용 프로그램에는 RootViewController (UIPageViewController), FirstController (UIViewController) 및 SecondController (UIViewController)가 있습니다. 2 개의 UIViewController 내의 두 개의보기가 RootViewController을 스크롤합니다.UIPageViewController 대리자 메서드가 호출되지 않았습니다.

내 RootViewController.h에서

:

@interface RootController : UIPageViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate> 

을하지만 같은 다른보기 대리자 메서드를 스크롤 할 때 :

-(void) pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 

호출되지 않습니다. 왜? 누군가 나를 도울 수 있습니까? 미리 감사드립니다.

답변

22

rootViewController (대리자 호출을 받으려는 컨트롤러/개체)를 UIPageViewController의 대리자/데이터 소스로 지정 했습니까?

pageViewController.delegate = rootViewController; 
pageViewController.dataSource = rootViewController; 
1

페이지 뷰 컨트롤러의 대리자 콘센트에 어떻게 연결 했습니까? 내 생각 엔 당신이 델리게이트 링크를 연결 한 적이 없다는 것입니다.

페이지 뷰 컨트롤러를 자체 데이터 소스 및 위임자로 설정하는 것이 이상합니다. 나는 당신이하고있는 것처럼 그렇게하려고하지 않았으며 그것이 효과가 있을지 확신하지 못했습니다. 나는 항상 페이지 뷰 컨트롤러를 관리하는 컨테이너 뷰 컨트롤러를 설정했다. 스토리 보드를 사용하면 IB에서 컨테이너 뷰를 설정하고 소스 세그먼트를 연결할 수 있습니다. 그런 다음 컨테이너 뷰 컨트롤러를 데이터 소스 및/또는 델리게이트로 만들 것입니다.

+0

페이지 뷰 컨트롤러를 자체 데이터 소스로 사용하면서 테스트를 수행했습니다. viewDidLoad에서 dataSource를 설정하려고하면 대리자 메서드가 호출되지 않습니다. 그러나 자신의 init을 수행하고 super init 메소드를 호출 한 후에 dataSource를 설정하면 위임 메소드가 호출됩니다. 나는 컨테이너 뷰 전략으로 전환 할 것이므로 init을 재정의하는 것을 좋아하지 않지만 다른 사람들에게 그 하나의 해결 방법이 있다는 것을 알릴 것이라고 생각했다. –

5

위의 분명한 해결책 외에도이 문제가 발생하는 경우 PageViewController 자체가 유지되지 않을 가능성을 고려하십시오. 나는 오늘 저녁에 PageViewController를 인스턴스화하고 그 뷰를 subView로 추가했지만 pageViewController 자체는 유지하지 않는 실수를했습니다.

childViewController로 추가하거나 강력한 속성에 할당하여 유지해야합니다.

+0

나는 그것을 UICollectionReusableView에 추가하여 childViewController로 추가 할 수 없었다. . 그래서 강한 재산에 맡기는 것이 그것을했습니다. 덕분에 – osrl

+0

나는 UIPageViewController 메서드 var 대신 나를 위해 문제를 만들고 있던 인스턴스 변수를 추가 한 것을 깨달았다. – KarunPant75

0

왜 didFinishAnimating이 호출되지 않았는지 알아 내려고 노력했습니다. 내 대표단은 맞았지만 스위프트 3에서는 다음과 같이 기능이 변경되었습니다.

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) 

위의주의를 기울여주십시오. 아래 함수는 호출되지 않습니다.

func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) 
관련 문제